题目描述:
给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
解题分析:
先排序,然后用变量currLength记录连续序列的长度:
- 如果当前元素比前一个大1,说明他们可以构成连续的序列,currLength就加1。
- 如果相等就跳过。
- 否则就不能构成连续的序列,currLength要重置为1,要重新统计。
class Solution {
public:
/**
* max increasing subsequence
* @param arr int整型vector the array
* @return int整型
*/
int MLS(vector<int>& arr) {
// write code here
if(arr.size()<=1)
return arr.size();
sort(arr.begin(), arr.end());
int maxLength=0;
int currLength=1;
int arrIdx=1;
while(arrIdx<arr.size()){
if(arr[arrIdx-1]+1==arr[arrIdx]){
currLength+=1;
}
else if(arr[arrIdx-1]==arr[arrIdx]){
currLength=currLength;
}
else{
currLength=1;
}
arrIdx+=1;
maxLength=max(maxLength, currLength);
}
return maxLength;
}
};