leetcode 128. Longest Consecutive Sequence
解法一:
- 先进行排序,然后比较
但sort不一定让用
解法二:
- 遍历每一个数nums,定义两个值 pre,next; pre=nums--, next=nums++;找是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Solution { public : int longestConsecutive(vector< int >& nums) {<br> // 由于不考虑重复的情况,所以用set set< int > s(nums.begin(),nums.end()); int res=0; for ( int i=0;i<nums.size();i++) { int pre=nums[i]-1; int next=nums[i]+1; while (s.count(pre)!=0)pre--; while (s.count(next)!=0) next++; res=max(res, (next-pre-1)); // cout<<pre<<" "<<next<<endl; } return res; } }; |
但是这个解法里根本没有考虑已经被考虑的元素:
假设为【1,2,3,4】
从1 开始 1 得到0-5;
接着考虑2: 2 也是0-5
所以被考虑过的元素要删除。。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Solution { public : int longestConsecutive(vector< int >& nums) { unordered_set< int > s(nums.begin(),nums.end()); int res=0; for ( int i=0;i<nums.size();i++) { if (s.find(nums[i])==s.end()) continue ;<br> //删除考虑过的元素 s.erase(nums[i]); int pre=nums[i]-1; int next=nums[i]+1; while (s.count(pre)!=0) s.erase(pre--); while (s.count(next)!=0) s.erase(next++); res=max(res, (next-pre-1)); // cout<<pre<<" "<<next<<endl; } return res; } }; |
set 为有序且不重复:
set: nums=[1,2,3,4,3]
set(num.begin(), nums.end())
得到的set为: [1,2,3,4];
nums=[3,2,1,3,4]
得到的set为:[1,2,3,4]
unordered_set
没有顺序
python 解法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Solution( object ): def longestConsecutive( self , nums): """ :type nums: List[int] :rtype: int """ maxlen = 0 ; numset = set (nums) for n in set (nums): if (n not in numset): continue prenum = n - 1 ; nextnum = n + 1 ; while (prenum in numset): numset.discard(prenum) prenum - = 1 while (nextnum in numset): numset.discard(nextnum) nextnum + = 1 maxlen = max (maxlen, nextnum - prenum - 1 ) return maxlen |
python 中的set操作:
python 中的main 函数:
if __name__=="__main__": 类似java与c中的main主函数。。。
if __name__=="__main__":
nums=[100, 4, 200,1,3,2]
s=Solution()
c=s.longestConsecutive(nums)
print(c)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步