128. 最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

思路:

这个我认为,O(n)借助STL容器的O(n),很没有意义,关键就在于排序去重而已,用map将他去重,有序之后最后考察的还是双指针算法。还不如干脆直接点直接排序,去重不要用排序。

代码

  1. class Solution {
  2. public:
  3. int longestConsecutive(vector<int>& nums) {
  4. set<int> s;
  5. for(auto &x:nums) s.insert(x);
  6. nums.resize((int)s.size());
  7. int k=0;
  8. for(auto &x:s){
  9. nums[k++]=x;
  10. }
  11. int n=nums.size();
  12. int ans=0;
  13. for(int i=0;i<n;i++){
  14. int j=i+1;
  15. while(j<n&&nums[j]-nums[j-1]==1) j++;
  16. cout<<i<<" "<<j<<endl;
  17. ans=max(j-i,ans);
  18. i=j-1;
  19. }
  20. return ans;
  21. }
  22. };
  1. class Solution {
  2. public:
  3. int longestConsecutive(vector<int>& nums) {
  4. sort(nums.begin(),nums.end());
  5. nums.erase(unique(nums.begin(),nums.end()),nums.end());
  6. int n=nums.size();
  7. int ans=0;
  8. for(int i=0;i<n;i++){
  9. int j=i+1;
  10. while(j<n&&nums[j]-nums[j-1]==1) j++;
  11. cout<<i<<" "<<j<<endl;
  12. ans=max(j-i,ans);
  13. i=j-1;
  14. }
  15. return ans;
  16. }
  17. };