由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode longest consecutive sequence怎么做
相关主题
leetcode longest consecutive sequence还是想不通!Post 1 question: Bits operation using C programming
Longest Consecutive Sequence 问题释疑请问longest common consecutive sequence用什么算法?
Random Array number, Find longest consecutive sequence面试的时候可以用TreeSet或者TreeMap之类的数据结构嘛
二爷的那个Longest Consecutive Sequence的新解法?F家伪面经,求bless
请问leetcode 上那道Longest Consecutive Sequence题分享几个FGTP Internship 的面经,顺便求FG收留
问个近来看到的狗家题:longest consecutive sequence in tree请问binary tree longest consecutive number这题的思路
面试题热乎乎的Z家面经
欢迎大家积极讨论一个ms简单的算法面试题几道面试题
相关话题的讨论汇总
话题: int话题: tmp话题: num话题: cur话题: hashtable
进入JobHunting版参与讨论
1 (共1页)
c********p
发帖数: 1969
1
我觉得我的方法已经很简单了,还是过不了大oj,咋回事呢!
求好方法。
我的方法是,
1,先把整个数组过一遍,放到hashtable里,O(N)
2,再过一遍整个数组,每读到一个数 k,记录hashtable里数字的个数,check是否有比
k大的,如果有,查是否有比这个更大的,并从hashtable删掉这个数,直到没有连续比
它大的了,stop。
check是否有比k小的,如果有,查是否有比这个更小的,并从hashtable删掉这个数,
直到没有连续比它大的了,stop。
删掉k,
查hashtable的个数,差别就是连续的个数。
---所以这一步一共也是过了2遍。。。
O(N)
总的时间复杂度也是 O(N)
可是,过不了大oj。。。
咋回事呢?
s*********t
发帖数: 52
2
你说的查hashtable的个数,因为非空bucket不是连续排列的,所以这个操作的复杂度
是O(M),M是bucket的个数,这个耗时比O(N)还大,我试了一下你说的方法,没有
查剩余数字的个数差,而是数删掉的数字的数量,可以通过大数据,我这里用的是set
,find的复杂度实际上是O(log_n),也能通过大数据,如果换成unordered_set,会更
快。
class Solution {
public:
int longestConsecutive(vector &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
set myset;
int ret = -INT_MAX;

for (int i = 0; i < num.size(); i++) {
if (myset.find(num[i]) == myset.end()) {
myset.insert(num[i]);
}
}

while (myset.begin() != myset.end()) {
int cntafter = 0, cntbefore = 0;
set::iterator it = myset.begin();

while (myset.find(*it + cntafter + 1) != myset.end()) {
myset.erase(*it + cntafter + 1);
cntafter++;
}
while (myset.find(*it - cntbefore - 1) != myset.end()) {
myset.erase(*it - cntbefore - 1);
cntbefore++;
}
myset.erase(*it);

ret = max(ret, cntbefore + cntafter + 1);
}

return ret;
}
};
w******j
发帖数: 185
3
public static int longestConsecutive(int[] num) {
Hashtable ht = new Hashtable();
int max = 0;

for(int i = 0; i < num.length; i++)
{
int tmp = num[i];
if(!ht.containsKey(tmp))
{
int low = tmp;
int high = tmp;

ht.put(tmp, new Interval(high, low));
if(ht.containsKey(tmp - 1))
{
low = ht.get(tmp - 1).low;
}
if(ht.containsKey(tmp + 1))
{
high = ht.get(tmp + 1).high;
}

//update only the high and the low
ht.get(low).high = high;
ht.get(high).low = low;

max = Math.max((high - low + 1), max);
}
}

return max;
}
k*******t
发帖数: 144
4
class Solution {
public:
int longestConsecutive(vector &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
unordered_map mapping;
for(int i = 0; i < num.size(); ++i)
{
mapping[num[i]] = true;
}

int longest = 0;
for(int i = 0; i < num.size(); ++i)
{
int len = 0;
int cur = num[i];
while(mapping.find(cur) != mapping.end())
{
++len;
mapping.erase(cur);
++cur;
}
cur = num[i] - 1;
while(mapping.find(cur) != mapping.end())
{
++len;
mapping.erase(cur);
--cur;
}
if(len > longest)
{
longest = len;
}
}
return longest;
}
};
c********p
发帖数: 1969
5
谢谢好心人指出问题所在!
我按你说的试试:)

set

【在 s*********t 的大作中提到】
: 你说的查hashtable的个数,因为非空bucket不是连续排列的,所以这个操作的复杂度
: 是O(M),M是bucket的个数,这个耗时比O(N)还大,我试了一下你说的方法,没有
: 查剩余数字的个数差,而是数删掉的数字的数量,可以通过大数据,我这里用的是set
: ,find的复杂度实际上是O(log_n),也能通过大数据,如果换成unordered_set,会更
: 快。
: class Solution {
: public:
: int longestConsecutive(vector &num) {
: // Start typing your C/C++ solution below
: // DO NOT write int main() function

c********p
发帖数: 1969
6
我按你说的count了每次删掉的个数,还是不行哦。。。
怎么办,,,能帮我看一下代码么。。。
谢谢!

set

【在 s*********t 的大作中提到】
: 你说的查hashtable的个数,因为非空bucket不是连续排列的,所以这个操作的复杂度
: 是O(M),M是bucket的个数,这个耗时比O(N)还大,我试了一下你说的方法,没有
: 查剩余数字的个数差,而是数删掉的数字的数量,可以通过大数据,我这里用的是set
: ,find的复杂度实际上是O(log_n),也能通过大数据,如果换成unordered_set,会更
: 快。
: class Solution {
: public:
: int longestConsecutive(vector &num) {
: // Start typing your C/C++ solution below
: // DO NOT write int main() function

1 (共1页)
进入JobHunting版参与讨论
相关主题
几道面试题请问leetcode 上那道Longest Consecutive Sequence题
zenefits店面(已挂)问个近来看到的狗家题:longest consecutive sequence in tree
G题讨论面试题
我应不应该现在申请H1B?欢迎大家积极讨论一个ms简单的算法面试题
leetcode longest consecutive sequence还是想不通!Post 1 question: Bits operation using C programming
Longest Consecutive Sequence 问题释疑请问longest common consecutive sequence用什么算法?
Random Array number, Find longest consecutive sequence面试的时候可以用TreeSet或者TreeMap之类的数据结构嘛
二爷的那个Longest Consecutive Sequence的新解法?F家伪面经,求bless
相关话题的讨论汇总
话题: int话题: tmp话题: num话题: cur话题: hashtable