难度:Hard
题目要求:
O(n)时间。
解题思路:
第一种思路,先找出最大值max、最小值min,然后申请大小max-min+1的hash数组,将原始数组映射过来。遍历一遍hash数组,找最长的。这种方法遇到[-88888888,0,88888888]会tle。
第二种思路,用set,将数组存到set里面。然后遍历数组,以每个元素为初始值,找最长的。这种方法遇到[0,1,2…….,10000]的时候会RunTimeError。
怎么办?直接sort了一下数组,然后找最长的连续值。竟然过了。。不过题目要求是O(n)的时间,sort这里会不会算是作弊。
1 | class Solution { |
运行结果:16ms,超过92.63%
分割线
看了答案,调用sort是作弊行为。
按照上面set的思路继续分析。将数组存到set里面。然后遍历数组,寻找当前元素所在区间的最大最小值,同时删除掉该区间的值,找出最大的区间。
1 | class Solution { |
运行时间:19ms,超过73.61%。(使用set的运行时间为39ms)