Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41106
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-11-22 11:23:36

用unordered_map保存每个元素及其出现的位置。
遍历num,遇到未检查过的元素,则依次检查比其大和比其小的元素是否存在,并把检测过的元素都标记为已检测。若新找到的连续整数长度大于已经发现的最大长度,则更新。




点击(此处)折叠或打开

  1. class Solution {
  2. public:
  3.     int longestConsecutive(vector<int> &num) {
  4.         // IMPORTANT: Please reset any member data you declared, as
  5.         // the same Solution instance will be reused for each test case.
  6.         int re=0;
  7.         
  8.         unordered_map<int,int> exist;
  9.         for(int i=0;i<num.size();i++)
  10.         {
  11.             exist.insert(pair<int,int>(num[i],i));
  12.         }
  13.         vector<bool> visited(num.size(),false);
  14.         for(int i=0;i<num.size();i++)
  15.         {
  16.             if(false==visited[i])
  17.             {
  18.                 visited[i]=true;
  19.                 int j;
  20.                 int k;
  21.                 for(j=num[i]+1;exist.count(j);j++) visited[exist[j]]=true;
  22.                 for(k=num[i]-1;exist.count(k);k--) visited[exist[k]]=true;
  23.                 if(j-k-1>re) re=j-k-1;
  24.             }
  25.         }
  26.         return re;
  27.     }
  28. };

阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~