一. 题目

二. 思路

1. 记忆化搜索

  • 现用HashSet存储所有数,平均查询O(1)

  • 记忆化搜索n->n-1->....,避免重复查找。

2. 哈希表

三. 代码

1. 记忆化搜索

class Solution
{
    Set<Integer> ns = new HashSet<>();
    Map<Integer, Integer> f = new HashMap<>();

    int dfs(int x)
    {
        if (f.containsKey(x)) return f.get(x);

        int len = 1;
        if (ns.contains(x - 1))
            len += dfs(x - 1);
        f.put(x, len);
        return len;
    }

    public int longestConsecutive(int[] nums)
    {
        for (Integer num : nums)
            ns.add(num);
        int ans = 0;
        for (Integer num : nums)
            ans = Math.max(ans, dfs(num));
        return ans;
    }
}