由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Maximum Sum of Increasing Sequence
相关主题
面试题count # of increasing subsequences of String求解longest increase subsequence
狗家 题 讨论find all longest increasing subsequence 谁有源码?
问个算法题5Leetcode 689居然是fb的高频题?
这段LIS为啥崩溃?google题
fb电面第一轮最长递增子array的算法
一道 facebook 电面题career cup book v4 9.7 题
g公司面试问Longest increasing subsequence,意义在哪里?问一个经典题
求Longest_Increasing_Subsequence JAVA O(nlgn) 代码分享Imo电面题
相关话题的讨论汇总
话题: increasing话题: sum话题: max话题: maximum
进入JobHunting版参与讨论
1 (共1页)
Z*****Z
发帖数: 723
1
Maximum Sum of Increasing Subsequence
Given an integer array, how will you find out the increasing subsequence whi
ch gives the largest sum. For example,
50,23,1,67,30 in this subsequence a few possible increasing subsequences are
1) 23,30
2) 23,67
2) 50,67
3) 1,67
4) 1,30
5) 67
6) 30
but50, 67 gives the maximum sum. How to find it?
用DP,O(N)空间,O(N2)时间,是最优么?能不能像LIS那样优化成O(NlgN)?
y**i
发帖数: 1112
2

whi
are
这个用DP怎么解?
这个用brute force直接做两层循环不也是O(N2)时间么,还不用额外空间

【在 Z*****Z 的大作中提到】
: Maximum Sum of Increasing Subsequence
: Given an integer array, how will you find out the increasing subsequence whi
: ch gives the largest sum. For example,
: 50,23,1,67,30 in this subsequence a few possible increasing subsequences are
: 1) 23,30
: 2) 23,67
: 2) 50,67
: 3) 1,67
: 4) 1,30
: 5) 67

b********h
发帖数: 119
3
subsequence不是subarray吧。bruteforce应该是2^n。
DP的做法跟max subsequence一样,定义S(i)为在i结束的max increaseing sequence,
则,
S(i) = max{S(j)+A[i], A[i]>A[j] && 0<=j
【在 y**i 的大作中提到】
:
: whi
: are
: 这个用DP怎么解?
: 这个用brute force直接做两层循环不也是O(N2)时间么,还不用额外空间

Z*****Z
发帖数: 723
4
对,sequence不一定连续

【在 b********h 的大作中提到】
: subsequence不是subarray吧。bruteforce应该是2^n。
: DP的做法跟max subsequence一样,定义S(i)为在i结束的max increaseing sequence,
: 则,
: S(i) = max{S(j)+A[i], A[i]>A[j] && 0<=j
y**i
发帖数: 1112
5
我想的就是这样的,两个循环,外层循环是当前检测的subsequence的起始点,内层循
环是终结点,用一个变量max记录目前为止最大的sum,用另一个变量index记录上一个
检测的increasing subsequence的终结点,如果当前的内循环变量所指的元素大于变量
index所指元素,那么就更新increasing subsequence的终结点并把其于max的和跟max
比较及更新max。对这应该是DP思想,因为记录了检测过的increasing sequence的最大
和,而不是把所以的increasing subsequence先全部找出来再求和比较,那样确实是2^
n。
不过这个DP应该不需要额外O(n)空间,因为我们只要记录最大就可以了对吧,没必要记录所有的sum

【在 b********h 的大作中提到】
: subsequence不是subarray吧。bruteforce应该是2^n。
: DP的做法跟max subsequence一样,定义S(i)为在i结束的max increaseing sequence,
: 则,
: S(i) = max{S(j)+A[i], A[i]>A[j] && 0<=j
Z*****Z
发帖数: 723
6
问题是如果内循环变量所指元素小于index所指元素应该如何做呢?

我想的就是这样的,两个循环,外层循环是当前检测的subsequence的起始点,内层循
环是终结点,用一个变量max记录目前为止最大的sum,用另一个变量index记录上一个
检测的increasing subsequence的终结点,如果当前的内循环变量所指的元素大于变量
index所指元素,那么就更新increasing subsequence的终结点并把其于max的和跟max
比较及更新max。对这应该是DP思想,因为记录了检测过的increasing sequence的最大
和,而不是把所以的increasing subsequence先全部找出来再求和比较,那样确实是2^
n。
不过这个DP应该不需要额外O(n)空间,因为我们只要记录最大就可以了对吧,没必要记
录所有的sum

【在 y**i 的大作中提到】
: 我想的就是这样的,两个循环,外层循环是当前检测的subsequence的起始点,内层循
: 环是终结点,用一个变量max记录目前为止最大的sum,用另一个变量index记录上一个
: 检测的increasing subsequence的终结点,如果当前的内循环变量所指的元素大于变量
: index所指元素,那么就更新increasing subsequence的终结点并把其于max的和跟max
: 比较及更新max。对这应该是DP思想,因为记录了检测过的increasing sequence的最大
: 和,而不是把所以的increasing subsequence先全部找出来再求和比较,那样确实是2^
: n。
: 不过这个DP应该不需要额外O(n)空间,因为我们只要记录最大就可以了对吧,没必要记录所有的sum

y**i
发帖数: 1112
7
我知道了,我想错了,是要记录下所有之前的sum,然后每次从之前的sum中找出最大的
再记录

max
2^

【在 Z*****Z 的大作中提到】
: 问题是如果内循环变量所指元素小于index所指元素应该如何做呢?
:
: 我想的就是这样的,两个循环,外层循环是当前检测的subsequence的起始点,内层循
: 环是终结点,用一个变量max记录目前为止最大的sum,用另一个变量index记录上一个
: 检测的increasing subsequence的终结点,如果当前的内循环变量所指的元素大于变量
: index所指元素,那么就更新increasing subsequence的终结点并把其于max的和跟max
: 比较及更新max。对这应该是DP思想,因为记录了检测过的increasing sequence的最大
: 和,而不是把所以的increasing subsequence先全部找出来再求和比较,那样确实是2^
: n。
: 不过这个DP应该不需要额外O(n)空间,因为我们只要记录最大就可以了对吧,没必要记

c********g
发帖数: 13
8
这个应该可以
#define nums 8
#include
using namespace std;
int main()
{
int max[10];
int pre[10];
int num[100]={50,23,1,67,30,40,45,49};
max[0]=num[0];
pre[0]=0;
for(int i=1;i {
int temp=0;
max[i]=num[i];
pre[i]=i;
for(int j=0;j {
if(num[i]>num[j])
{
if(max[j]>=temp)
{
temp=max[j];
r****o
发帖数: 1950
9
这个DP和找longest increasing subsequence差不多吧。

whi
are

【在 Z*****Z 的大作中提到】
: Maximum Sum of Increasing Subsequence
: Given an integer array, how will you find out the increasing subsequence whi
: ch gives the largest sum. For example,
: 50,23,1,67,30 in this subsequence a few possible increasing subsequences are
: 1) 23,30
: 2) 23,67
: 2) 50,67
: 3) 1,67
: 4) 1,30
: 5) 67

Z*****Z
发帖数: 723
10
对,基本DP解法是一样的,LIS能优化,这个能不?

【在 r****o 的大作中提到】
: 这个DP和找longest increasing subsequence差不多吧。
:
: whi
: are

相关主题
一道 facebook 电面题longest increase subsequence
g公司面试问Longest increasing subsequence,意义在哪里?find all longest increasing subsequence 谁有源码?
求Longest_Increasing_Subsequence JAVA O(nlgn) 代码Leetcode 689居然是fb的高频题?
进入JobHunting版参与讨论
c********g
发帖数: 13
11
我的教授说LIS能优化到O(NlgN),但他说的那段我没听懂,后来知道考试不考也就没细
想了。不过我猜这个也应该能优化到O(NlgN)

【在 Z*****Z 的大作中提到】
: 对,基本DP解法是一样的,LIS能优化,这个能不?
Z*****Z
发帖数: 723
12
想了一下,觉得玄。
LIS优化的巧妙之处在于sequence长度不会超过输入数组的长度,对每个increasing su
bsequence可以根据其长度记录那个最后的元素。
这里是和,貌似不太可能

【在 c********g 的大作中提到】
: 我的教授说LIS能优化到O(NlgN),但他说的那段我没听懂,后来知道考试不考也就没细
: 想了。不过我猜这个也应该能优化到O(NlgN)

y**i
发帖数: 1112
13
LIS的优化是维护一个当前最长递增子序列(下标),并把这个子序列里当前考察元素的前
一个元素下标保存下来,然后在考察下一个元素的时候用二分查找的方法去更新这个子
序列(更新过程中不能保证有序),同样记录子序列中当前元素的前一个元素下标。最
后用倒序的方法找出最长子序列。
如果用在求和上,就是看怎么把这个“最长”改成“最大和”。

【在 c********g 的大作中提到】
: 我的教授说LIS能优化到O(NlgN),但他说的那段我没听懂,后来知道考试不考也就没细
: 想了。不过我猜这个也应该能优化到O(NlgN)

r****o
发帖数: 1950
14
多谢,请问哪儿有关于这个LIS的优化的详细资料?

素的前

【在 y**i 的大作中提到】
: LIS的优化是维护一个当前最长递增子序列(下标),并把这个子序列里当前考察元素的前
: 一个元素下标保存下来,然后在考察下一个元素的时候用二分查找的方法去更新这个子
: 序列(更新过程中不能保证有序),同样记录子序列中当前元素的前一个元素下标。最
: 后用倒序的方法找出最长子序列。
: 如果用在求和上,就是看怎么把这个“最长”改成“最大和”。

y**i
发帖数: 1112
15
我就是在wiki上看到的一个external link,连代码都有。给你链接:
http://www.algorithmist.com/index.php/Longest_Increasing_Subsequence

【在 r****o 的大作中提到】
: 多谢,请问哪儿有关于这个LIS的优化的详细资料?
:
: 素的前

1 (共1页)
进入JobHunting版参与讨论
相关主题
分享Imo电面题fb电面第一轮
问一道面试题一道 facebook 电面题
被简单题给虐了。g公司面试问Longest increasing subsequence,意义在哪里?
纽约小公司dataminr面经 + 求帮忙分析offer求Longest_Increasing_Subsequence JAVA O(nlgn) 代码
面试题count # of increasing subsequences of String求解longest increase subsequence
狗家 题 讨论find all longest increasing subsequence 谁有源码?
问个算法题5Leetcode 689居然是fb的高频题?
这段LIS为啥崩溃?google题
相关话题的讨论汇总
话题: increasing话题: sum话题: max话题: maximum