这道题,我想最简单的做法就是先排序,然后顺序记录最长子序列。这样基本不需要辅助空间。
如果要实现时间复杂度为O(n)的方法,那么就得用空间来换时间,所以得找一种数据结构来存储,并且很快知道相邻关系。可以使用hash表或者set来存储,这样当一个数num存进去,我就能判断num-1 和num+1在不在里面了。
从而我们可以使用set去完成,假设num-1在里面,那么就不应该从num开始计数,从而继续向前检查,直到num-1不在里面,那这样就能将子序列遍历完,并且是最长的。
code:
class Solution {
public:
int longestConsecutive(vector<int>