方法一:用一个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。
浙公网安备 33010602011771号