有意思的一题,首先,时间需要时on,这个时间想到的只有hashmap,treemap不行,因为tree的操作的ologn,hasdmap是o1,然后遍历一次。如果这个数的左右两边没数,则·dp=1 有数的话,就更新一段联系区间的最左右的端点的dp值,dp值表示包括这个数在内的连续最大长度。所以时间上应该是on,其实我觉得是o3n,不过好像题解就是这个方法。。。。 2刷学习一下别人6巷代码的写法 Ps 这题是用unordered_map!!!!!
class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_map<int, int>dp; int maxx = 1; for(int i = 0; i < nums.size(); ++ i){ if(dp.find(nums[i]) != dp.end()){ continue; } int t; if(dp.find(nums[i] - 1) != dp.end() && dp.find(nums[i] + 1) != dp.end()){ dp[nums[i]] = dp[nums[i] - 1] + dp[nums[i] + 1] + 1; t = dp[nums[i]]; dp[nums[i] - dp[nums[i] - 1]] = t; dp[nums[i] + dp[nums[i] + 1]] = t; } else if(dp.find(nums[i] - 1) != dp.end()){ dp[nums[i]] = dp[nums[i] - 1] + 1; t = dp[nums[i]]; dp[nums[i] - dp[nums[i] - 1]] = t; } else if(dp.find(nums[i] + 1) != dp.end()){ dp[nums[i]] = dp[nums[i] + 1] + 1; t = dp[nums[i]]; dp[nums[i] + dp[nums[i] + 1]] = t; } else{ dp[nums[i]] = 1; } if(maxx < t) maxx = t; } return maxx; }};新闻热点
疑难解答