题解 | #连续的牛群标签序列#

连续的牛群标签序列

https://www.nowcoder.com/practice/5db36ae74c274176a0cf9274e9f9ed3e

知识点

双指针

思路

由题意,标签的编号是不受原位置影响的,所以我们可以先排序,然后用类似双指针的思路,用l代表序列的左端点,i代表序列的右端点。我们先假设i位于下标为0的位置,然后向右递推i,显然连续的标签序列至少为1.

我们检查a[i]-a[i-1]==1,若为真,则i可以继续尝试向右移动,否则说明这个连续序列已经不合法了,将左端点l移动至当前的i位置。

使用ans维护最大的区间长即可,区间长度为i-l+1

代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tag int整型vector 
     * @return int整型
     */
    int longestConsecutive(vector<int>& tag) {
        // write code here
        sort(tag.begin(),tag.end());
        int l=0;
        int ans=1;
        for(int i=1;i<tag.size();i++)
        { 
           if(tag[i]-tag[i-1]==1)
           {
              ans=max(ans,i-l+1);
           }
           else {
           l=i;
           }
        }
        return ans;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务