由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Longest Increasing Subsequence用binary还能输出结果数组吗?
相关主题
longest increasing subsequence O(NlogN)算法中数组 P 是否必问一A家题目
nlogn for longest increasing subsequence来道难一点的题
g公司面试问Longest increasing subsequence,意义在哪里?Longest Increasing Subsequence O(NLOG(N)) 解法
longest increase subsequence看到一个longest increasing subsequence挺有意思的算法
Longest Increasing Subsequence要掌握nlogn的解法吗?求Longest_Increasing_Subsequence JAVA O(nlgn) 代码
面试题count # of increasing subsequences of String求解帮忙看个题
Facebook interview 面经问一个题,求相同元素最多的两个数组
career cup book v4 9.7 题find all longest increasing subsequence 谁有源码?
相关话题的讨论汇总
话题: lists话题: int话题: 数组话题: array话题: binary
进入JobHunting版参与讨论
1 (共1页)
c********t
发帖数: 5706
1
不用binary O(n^2) 可以输出结果数组。
用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?
H****s
发帖数: 247
2
查看下面链接:
http://en.wikipedia.org/wiki/Longest_increasing_subsequence

【在 c********t 的大作中提到】
: 不用binary O(n^2) 可以输出结果数组。
: 用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?

c********t
发帖数: 5706
3
嗯,这回读自习了,果然可以。

【在 H****s 的大作中提到】
: 查看下面链接:
: http://en.wikipedia.org/wiki/Longest_increasing_subsequence

C***U
发帖数: 2406
4
我最近想出来一个dp的做法
感觉的比那个wiki上的解法要更自然一点

【在 c********t 的大作中提到】
: 不用binary O(n^2) 可以输出结果数组。
: 用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?

c********t
发帖数: 5706
5
求解,我想到的dp都是O(n^2)的

【在 C***U 的大作中提到】
: 我最近想出来一个dp的做法
: 感觉的比那个wiki上的解法要更自然一点

C***U
发帖数: 2406
6
我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
会想错问题
例子: 5 4 3 2 1 3 4
有一个lists里面的元素是array
1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
这时候lists就是
a) 5
2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
a)4
b)5
3. 3 2 1进来的时候,像前面一样,2分查找到自己的位置,lists变成
a) 1
b) 2
c) 3
d) 4
e) 5
4. 第二个3进来的时候,我们2分查找,会发现3应该放入所有d)前面的array里面。然
而当3放入以后我们没有必要全部保留前面的array,而是只要保留最长的那个,所以当
第二个3放入以后,lists就变成了
a) 1 3
b) 4
c) 5
5 当第二个4进来的时候,我们还是像前面查找,我们发现4应该放入a) b)里面,然后
我们只要保留最长的那个。所以当第二个4放进来以后,我们的lists就变成了
a) 1 3 4
b) 5
这个算法的时间复杂度要用到potential method,稍微有点复杂. potential function
是每一步lists里面array的个数. 空间是O(n),因为在每个时候,一个数字只出现在
lists里面一次.时间是O(nlogn),因为根据potential function,每一步用到O(logn)
的时间。
不知道这个算法和wiki上那个是不是一样.

【在 c********t 的大作中提到】
: 求解,我想到的dp都是O(n^2)的
c********t
发帖数: 5706
7
我觉得行,而且挺好懂得,第5步你删掉 数小于i的也该删去,2,3步都可以这样做,这样5,4,3,2,1做完只剩
a) 1
更简单,而且省空间。再看看有没有大牛指点。

lists

【在 C***U 的大作中提到】
: 我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
: 会想错问题
: 例子: 5 4 3 2 1 3 4
: 有一个lists里面的元素是array
: 1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
: 这时候lists就是
: a) 5
: 2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
: 里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
: a)4

c********t
发帖数: 5706
8
再想想,不对呀。如果1 4 2 3 ,你是什么步骤?

lists

【在 C***U 的大作中提到】
: 我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
: 会想错问题
: 例子: 5 4 3 2 1 3 4
: 有一个lists里面的元素是array
: 1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
: 这时候lists就是
: a) 5
: 2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
: 里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
: a)4

C***U
发帖数: 2406
9
恩。。。这个例子有问题
应该是原来的保留,然后在最长的后面增加那个数字

【在 c********t 的大作中提到】
: 再想想,不对呀。如果1 4 2 3 ,你是什么步骤?
:
: lists

c********t
发帖数: 5706
10
俺证实了你的想法可行,而且直观,其实用二维数组即可,不用list.
wiki上的我怎么也实现不了

【在 C***U 的大作中提到】
: 恩。。。这个例子有问题
: 应该是原来的保留,然后在最长的后面增加那个数字

相关主题
面试题count # of increasing subsequences of String求解问一A家题目
Facebook interview 面经来道难一点的题
career cup book v4 9.7 题Longest Increasing Subsequence O(NLOG(N)) 解法
进入JobHunting版参与讨论
c********t
发帖数: 5706
11
不用binary O(n^2) 可以输出结果数组。
用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?
H****s
发帖数: 247
12
查看下面链接:
http://en.wikipedia.org/wiki/Longest_increasing_subsequence

【在 c********t 的大作中提到】
: 不用binary O(n^2) 可以输出结果数组。
: 用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?

c********t
发帖数: 5706
13
嗯,这回读自习了,果然可以。

【在 H****s 的大作中提到】
: 查看下面链接:
: http://en.wikipedia.org/wiki/Longest_increasing_subsequence

C***U
发帖数: 2406
14
我最近想出来一个dp的做法
感觉的比那个wiki上的解法要更自然一点

【在 c********t 的大作中提到】
: 不用binary O(n^2) 可以输出结果数组。
: 用了binary,我只会求出最大长度 O(nlogn),无法输出最终结果数组,谁见过解法?

c********t
发帖数: 5706
15
求解,我想到的dp都是O(n^2)的

【在 C***U 的大作中提到】
: 我最近想出来一个dp的做法
: 感觉的比那个wiki上的解法要更自然一点

C***U
发帖数: 2406
16
我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
会想错问题
例子: 5 4 3 2 1 3 4
有一个lists里面的元素是array
1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
这时候lists就是
a) 5
2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
a)4
b)5
3. 3 2 1进来的时候,像前面一样,2分查找到自己的位置,lists变成
a) 1
b) 2
c) 3
d) 4
e) 5
4. 第二个3进来的时候,我们2分查找,会发现3应该放入所有d)前面的array里面。然
而当3放入以后我们没有必要全部保留前面的array,而是只要保留最长的那个,所以当
第二个3放入以后,lists就变成了
a) 1 3
b) 4
c) 5
5 当第二个4进来的时候,我们还是像前面查找,我们发现4应该放入a) b)里面,然后
我们只要保留最长的那个。所以当第二个4放进来以后,我们的lists就变成了
a) 1 3 4
b) 5
这个算法的时间复杂度要用到potential method,稍微有点复杂. potential function
是每一步lists里面array的个数. 空间是O(n),因为在每个时候,一个数字只出现在
lists里面一次.时间是O(nlogn),因为根据potential function,每一步用到O(logn)
的时间。
不知道这个算法和wiki上那个是不是一样.

【在 c********t 的大作中提到】
: 求解,我想到的dp都是O(n^2)的
c********t
发帖数: 5706
17
我觉得行,而且挺好懂得,第5步你删掉 数小于i的也该删去,2,3步都可以这样做,这样5,4,3,2,1做完只剩
a) 1
更简单,而且省空间。再看看有没有大牛指点。

lists

【在 C***U 的大作中提到】
: 我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
: 会想错问题
: 例子: 5 4 3 2 1 3 4
: 有一个lists里面的元素是array
: 1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
: 这时候lists就是
: a) 5
: 2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
: 里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
: a)4

c********t
发帖数: 5706
18
再想想,不对呀。如果1 4 2 3 ,你是什么步骤?

lists

【在 C***U 的大作中提到】
: 我给你举个例子说一下我的想法,顺便版上的大牛们可以看看我的想法对不对,我经常
: 会想错问题
: 例子: 5 4 3 2 1 3 4
: 有一个lists里面的元素是array
: 1. 5进来,这时候lists是空的,所以我就把5放入到一个array,然后插入到lists里面
: 这时候lists就是
: a) 5
: 2. 4进来,这时候我们用lists里面的array的最后一个数字来2分查找,因为现在lists
: 里面只有5,所以我们应该把4单独作为一个array放到lists里面,这时候lists就是
: a)4

C***U
发帖数: 2406
19
恩。。。这个例子有问题
应该是原来的保留,然后在最长的后面增加那个数字

【在 c********t 的大作中提到】
: 再想想,不对呀。如果1 4 2 3 ,你是什么步骤?
:
: lists

c********t
发帖数: 5706
20
俺证实了你的想法可行,而且直观,其实用二维数组即可,不用list.
wiki上的我怎么也实现不了

【在 C***U 的大作中提到】
: 恩。。。这个例子有问题
: 应该是原来的保留,然后在最长的后面增加那个数字

相关主题
看到一个longest increasing subsequence挺有意思的算法问一个题,求相同元素最多的两个数组
求Longest_Increasing_Subsequence JAVA O(nlgn) 代码find all longest increasing subsequence 谁有源码?
帮忙看个题Maximum Sum of Increasing Sequence
进入JobHunting版参与讨论
a**********e
发帖数: 157
21
stackoverflow这个很简洁易懂
http://stackoverflow.com/questions/6129682/longest-increasing-s

【在 c********t 的大作中提到】
: 俺证实了你的想法可行,而且直观,其实用二维数组即可,不用list.
: wiki上的我怎么也实现不了

C***U
发帖数: 2406
22

这个很强
set st;
set::iterator it;
st.clear();
for(i=0; i st.insert(array[i]);
it=st.find(array[i]);
it++;
if(it!=st.end()) st.erase(it);
}
cout<
【在 a**********e 的大作中提到】
: stackoverflow这个很简洁易懂
: http://stackoverflow.com/questions/6129682/longest-increasing-s

c********t
发帖数: 5706
23
多谢!

【在 a**********e 的大作中提到】
: stackoverflow这个很简洁易懂
: http://stackoverflow.com/questions/6129682/longest-increasing-s

l*****a
发帖数: 559
24
1 2 3 4 5 6 7 9 3 8 11 4 5 6 4 19 7 1 7 17 12 16
测试了一下,
跑不出正确答案。
错误结果是st.size() = 7

【在 C***U 的大作中提到】
: 恩
: 这个很强
: set st;
: set::iterator it;
: st.clear();
: for(i=0; i: st.insert(array[i]);
: it=st.find(array[i]);
: it++;
: if(it!=st.end()) st.erase(it);

l*******b
发帖数: 2586
25
想输出那个序列得要有一个数组记录每个数值在数列中之前的那个值,所以要多开一个
数组记录这个信息吧.
每次用binary search push进去一个之后那个数之前的一个数就是这个. 写得太烂了,
有空重写一下.
class Solution {
private:
vector s;
vector pre;
int push(int k) {
if(s.empty()){
s.push_back(k);
return -1;
}
if(k >= s.back()){
s.push_back(k);
return s[s.size()-2];
}
int l = 0, r = s.size()-1, mid;
while(l < r)
(s[mid = (l+r)/2] > k) ? r = mid : l = mid+1;
s[r] = k;
return (r-1 >= 0) ? s[r-1] : -1;
}
public:
int max_inc_seq (int a[], int n) {
int i;
for(i = 0; i < n; ++i)
pre.push_back(push(a[i]));
cout << "longest increasing: " << s.size() << '\n';
int pt = s.back();
i = n - 1;
while(pt != -1) {
cout << pt << " ";
for(; a[i] != pt ; i-- );
pt = pre[i--];
}
cout << '\n';
s.clear();
pre.clear();
return 0;
}
};
1 (共1页)
进入JobHunting版参与讨论
相关主题
find all longest increasing subsequence 谁有源码?Longest Increasing Subsequence要掌握nlogn的解法吗?
Maximum Sum of Increasing Sequence面试题count # of increasing subsequences of String求解
问个老问题 Longest palindrome in a stringFacebook interview 面经
Longest Consecutive Sequence 问题释疑career cup book v4 9.7 题
longest increasing subsequence O(NlogN)算法中数组 P 是否必问一A家题目
nlogn for longest increasing subsequence来道难一点的题
g公司面试问Longest increasing subsequence,意义在哪里?Longest Increasing Subsequence O(NLOG(N)) 解法
longest increase subsequence看到一个longest increasing subsequence挺有意思的算法
相关话题的讨论汇总
话题: lists话题: int话题: 数组话题: array话题: binary