题解 | 数组中的最长连续子序列

数组中的最长连续子序列

https://www.nowcoder.com/practice/eac1c953170243338f941959146ac4bf

首先,题目只要求找出最长连续的子串,并没有要求是连续的子串。所以我们可以先对数组进行排序,在寻找最长连续的子串即可。

寻找最长连续子串我们可以采取双指针算法来解决:

1、我们定义i,j指针,如果j-i == 1,则说明连续,此时j就可以持续向后走,同时让j与j-1位置的元素也进行比较。

2、但是数组中可能有重复元素,如果不处理,就会导致最终长度变长,所以我们额外设置变量count = 1,如果j-j-1 == 1,则count++,如果j-j-1 ==0,则说明该位置是重复元素,count不变,j继续走。

3、当j走到某个位置后,与前面的数不在连续了,此时就开始更新结果。ret = max(ret,count).

4、细节:因为该数组有可能本身就是一个连续数组,此时j可能会一致走到结尾,此时循环结束,并没有更新结果,所以我们在循环外面也得更新一次结果。

class Solution 
{
public:
    int MLS(vector<int>& arr) 
    {
        sort(arr.begin(), arr.end());
        int i = 0, j = 1;
        int count = 1, ret = 0;
        while(j < arr.size())
        {
            if(arr[j] - arr[j-1] == 1)
            {
                count++;
                j++;
            }
            else if(arr[j] - arr[j-1] == 0) j++;
            else
            {
                i = j;
                j = i + 1;
                ret = count > ret ? count : ret;
                count = 1;
            }
        }
        ret = count > ret ? count : ret;
        return ret;
    }
};

全部评论

相关推荐

深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务