有意思的一題,首先,時間需要時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; }};新聞熱點
疑難解答