找一个没排序的数组的最长连续块是多长
第一想法,排序,遍历就ok。。。
但是要求时间复杂度是O(n)
想了几分钟TAT
用hash记录每个数字啊。。。
然后枚举就好了。。
数字为n的时候扫描其左右两边时候有连续的数字
如果有就从hash删掉。。继续。。。直到没有。。。记录长度
class Solution { public: int longestConsecutive(vector<int> &num) { int size = num.size(); if( size == 0 ) return 0; unordered_set<int> st; int ans = 1; for(int i = 0 ; i < size ; i++) st.insert(num[i]); for(int i = 0 ; i < size ; i++) { int n = num[i]; int tmp = 1; //left st.erase(n); while(st.find(n - 1) != st.end()){ tmp ++; n--; st.erase(n); } n = num[i]; while(st.find(n + 1) != st.end()){ tmp ++; n++; st.erase(n); } if(tmp > ans) ans = tmp; } return ans; } };
by 1957