boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 黑客rank Stock Maximize
相关主题
写了一个find kth number in 2 sorted arrays的code 请大牛看
问道leetcode上的题
C++ Q 99-102
这题你肯定见过,但有准备coding么?
问题:从电话号码打出所有单词
amazon的那道题目
Interview questions, Bloomberg
一个容易记忆的permutation算法
好记(但不是最优)的combination算法
one C++ question
相关话题的讨论汇总
话题: int话题: maxval话题: mynode话题: accu话题: max
进入JobHunting版参与讨论
1 (共1页)
h*******8
发帖数: 29
1
搞了一个下午,一直超时,难道复杂度可以比O(n^2)小么。请教各位了。感觉自己实在
是太菜了。
代码是依据以下的方程,a[N]是input
f[i] = max( max(for all j, 0 (i-1)*a[i] - (a[1]+a[2]+...+a[i-1]) )
以下是代码
int main() {

int T;
#define RF
#ifdef RF
ifstream& in = ifstream("input.txt" , ios::in);
#else
istream& in = cin;
#endif
in>>T;
for(int t=0 ; t int N;
in>>N;
vector a(1,0);

vector cache(1 , 0);
int accu = 0;
for(int k=1 ; k<=N ; ++k) {
int t;
in>>t;
a.push_back(t);
accu += t;
cache.push_back(accu);
}


vector f(N+1 , 0);
f[1] = a[1]*(-1);

for(int i=2 ; i<=N ; i++){
int maxval = f[1];
int temp = cache[i-1]-a[1];
for(int j = 2 ; j temp -= a[j];
maxval = max(maxval , f[j] + (i-1-j)*a[i] - temp);
}
maxval = max(maxval , (i-1)*a[i] - cache[i-1]);
f[i] = maxval;
}
if(f[N]<0) cout<<0< else cout< }
return 0;
}
m****1
发帖数: 41
2
这题我正好做过~
好像是O(nlogn)
idea 是这样,依据题意,假如第i天的股价最高,那么前 i-1天都是买, 第i天卖 赚
最多
好,处理完一次以后,前i个可以不看了,从i+1开始,再找从i+1到结尾 最大的最大股
价,重复操作直到 i = size of array -1;
建一个
struct day {
int value; //当天的股价
int id; // 第id天
}
对 value 进行 NlogN 的排序,
然后扫一遍 就Ok
m****1
发帖数: 41
3
部分程序
long long process (int * my,int start,int end,int curmax) {
long long sum = 0;
for(int i=start;i sum += curmax - my[i];
return sum;
}
void solution ( int n) {
int a[n];
node mynode[n];
for(int i=0;i cin >> a[i];
mynode[i].id = i;
mynode[i].value = a[i];
}

mergeSort(mynode,n);
int curmaxId = -1;
int curmax;
long long total = 0;
for(int i=0;i int id = mynode[i].id;
curmax = mynode[i].value;
if(id > curmaxId){
total += process(a,curmaxId+1,mynode[i].id,curmax);
curmaxId = id;
}

}
cout<< total < }
p*****2
发帖数: 21240
4
这题误导。放到dp里了,实际上是greedy
w***o
发帖数: 109
5
O(n)就可以了,不用sort
h*******8
发帖数: 29
6
多谢回复,不过诚如二爷所说,这题是greedy。
你的思路也是greedy。
放在dp底下的确有点误导,待会重写个。

【在 m****1 的大作中提到】
: 这题我正好做过~
: 好像是O(nlogn)
: idea 是这样,依据题意,假如第i天的股价最高,那么前 i-1天都是买, 第i天卖 赚
: 最多
: 好,处理完一次以后,前i个可以不看了,从i+1开始,再找从i+1到结尾 最大的最大股
: 价,重复操作直到 i = size of array -1;
: 建一个
: struct day {
: int value; //当天的股价
: int id; // 第id天

m****1
发帖数: 41
7
对,倒过来扫就行~ O(n)
r**h
发帖数: 1288
8
这题的思路和只能买卖一次求最大利润那一题完全一样
只是题目介绍容易把人唬住了
1 (共1页)
进入JobHunting版参与讨论
相关主题
one C++ question
C++ object size一问
One C++ question
one C++ question
发个题目给大家复习一下marco
Why I can't compile this function successfully
C++: what is the output? How to interpret it?
C++ Q42: (C22)
问个c++题
C++问题
相关话题的讨论汇总
话题: int话题: maxval话题: mynode话题: accu话题: max