FTPrep, 128 Longest Consecutive Sequence
来源:互联网 发布:网络消费安全的ppt 编辑:程序博客网 时间:2024/06/05 02:53
思路很牛B!既然我们要得到最长的consecutive序列,那其实逆向思维,任何一个连续序列,只要选中了上面的一个点,一直往左还是往右延伸都可以得到这个序列的长度,所以可以随意选择。那么先构建一个set存放所有值,而且 即使不存放duplicate也不影响最后结果。
最好要注意的是,set和 iterator的基本用法:
Set.isEmpty() (这个和list.isEmpty() 一样啊,都是继承自父类的)
Set.contains(); // 也是和list.contains(); 一样继承自父类。
然后有专门的一个类Iterator,这个类是可以通过具体的 collections类型来定的,直接call这个类的iterator()方法就可以得到实例化的 iter了。
有了iter,就相当于c++的指针指向array/list的起始地址!!是地址不是元素。所以通过iter.next()就可以得到下一个元素的object。然后要将这个类进行强制转型。
具体代码如下:
class Solution { public int longestConsecutive(int[] nums) { if(nums.length==0) return 0; HashSet<Integer> numberSet = new HashSet<Integer>(); for(int num: nums) numberSet.add(num); int longestLen=1; while(!numberSet.isEmpty()){ Iterator iterator=numberSet.iterator(); int currLen=1; int startNum= (Integer)iterator.next(); // contains(), NOT has() numberSet.remove(startNum); int goingSmaller=startNum; while(numberSet.contains(goingSmaller-1)){ numberSet.remove(goingSmaller-1); goingSmaller--; currLen++; } int goingLarger=startNum; while(numberSet.contains(goingLarger+1)){ numberSet.remove(goingLarger+1); goingLarger++; currLen++; } longestLen=Math.max(longestLen, currLen); } return longestLen; }}// bug: Line 10: error: incompatible types: Object cannot be converted to int// 反应了自己对iterator的不熟练,用iterator遍历无序set,就靠iterator,要进行遍历操作,就要进行几个基本操作:// 1, 通过call实例化的set的iterator()方法得到iterator: Iterator iterator = mySet.iterator();// 2, 通过iterator来进行遍历,结合两个方法: hasNext(), next(), // while(iterator.hasNext()) { Object obj = iterator.next(); } // 注意了!!这个时候 next() 返回的是Object这个顶端父类,要想得到具体的Integer或String,要进行向下转型,因此要在前面加上 parse的方法。(Integer)iterator.next();就解决了Line10的问题。 同时next() 不仅返回了Object,而且还自己把iterator移动到下一个object,这跟iterator的具体实现有关,就不深究了。// 总之,这里就是用空间换时间。使用了set来存储所有的数字,然后只需要向左向右连续查询看是否存在既可。其实也没有什么算法,或者说通过set这种问题的转变来带来算法上时间的改进。// TODO: N*logN 排序后,怎么遍历一次得到最长串呢?如果处理duplicate的问题呢? 上面这个算法成功避免了duplicates问题,直接查寻下一个目标,而不是访问下一个,看是否符合期望。前者是主动的,后者是被动的。这样也许更容易记住这个问题。
阅读全文
0 0
- FTPrep, 128 Longest Consecutive Sequence
- 128 Longest Consecutive Sequence
- 128 Longest Consecutive Sequence
- 128Longest Consecutive Sequence
- Leetcode 128 Longest Consecutive Sequence
- LeetCode 128: Longest Consecutive Sequence
- LeetCode 128 Longest Consecutive Sequence
- LeetCode: Longest Consecutive Sequence [128]
- LeetCode 128 Longest Consecutive Sequence
- LeetCode(128)Longest Consecutive Sequence
- [leetcode 128] Longest Consecutive Sequence
- leetcode || 128、Longest Consecutive Sequence
- Longest Consecutive Sequence - LeetCode 128
- leetcode 128: Longest Consecutive Sequence
- leetcode 128:Longest Consecutive Sequence
- leetcode-128-Longest Consecutive Sequence
- [leetcode 128]Longest consecutive sequence
- Leetcode 128 Longest Consecutive Sequence
- FTPrep, 123 Best Time to Buy and Sell Stock III, 没完全懂,TODO
- FTPrep, 124 Binary Tree Maximum Path Sum
- FTPrep, 125 Valid Palindrome
- FTPrep, 126 Word Ladder II, TODO,略难,没搞懂
- FTPrep, 127 Word Ladder, TODO,略难,没搞懂
- FTPrep, 128 Longest Consecutive Sequence
- FTPrep, 129 Sum Root to Leaf Numbers
- FTPrep, 130 Surrounded Regions
- 【Go】包
- LIstview原理
- 谈谈 CGI、FastCGI、PHP-CGI、PHP-fpm
- nginx 的 php 开发环境部署
- Python第三方库安装笔记
- 【Leetcode】【python】Length of Last Word