128. Longest Consecutive Sequence

来源:互联网 发布:java多线程共享数据 编辑:程序博客网 时间:2024/06/01 20:35

有意思的一题,首先,时间需要时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;    }};
0 0
原创粉丝点击