题解 | #连续的牛群标签序列#
连续的牛群标签序列
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;
}
};