方法一:用一个map来辅助,代码简单,思路清晰

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     int findLHS(vector<int>& nums) 
12     {
13         unordered_map<int,int> imap;
14         for(int i:nums)
15             imap[i]++;
16         int count=0;
17         for(auto p:imap)
18         {
19             if(imap.find(p.first+1)!=imap.end())
20             {
21                 count=max(count,p.second+imap[p.first+1]);
22             }
23         }
24         return count;
25     }
26 };

方法二:排序,然后扫描数组,一遍扫描一边统计

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     int findLHS(vector<int>& nums) 
12     {
13         int sz=nums.size();
14         if(sz<2)
15             return 0;
16         sort(nums.begin(),nums.end());
17         int temp=1,pre=0,longest=0;
18         for(int i=1;i<sz;i++)
19         {
20             if(nums[i]==nums[i-1])
21                 temp++;
22             else if(nums[i]==nums[i-1]+1)
23             {
24                 longest=max(longest,pre?temp+pre:0);
25                 pre=temp;
26                 temp=1;
27             }
28             else
29             {
30                 longest=max(longest,pre?temp+pre:0);
31                 temp=1;
32                 pre=0;
33             }
34         }
35         longest=max(longest,pre?temp+pre:0);
36         return longest;
37     }
38 };

第二种方法比较好理解,不多说。方法一62ms,方法二42ms。

posted on 2018-06-06 10:25  高数考了59  阅读(136)  评论(0)    收藏  举报