codility上的练习(2)(二)

2014-11-23 22:04:24 来源: 作者: 浏览: 4
,还是当前的值,记录每次第二种操作之前的最大值,代码如下:
[cpp]
// you can also use includes, for example:
// #include
vector solution(int N, vector &A) {
// write your code here...
int i,m = A.size(), lastv = 0, lastt = -1, v = 0;
vector r, t;
r.resize(N , 0);
t.resize(N, -1);
for (i = 0; i < m; ++i) {
if (--A[i] < N) {
v = max(r[A[i]] = ((t[A[i]] > lastt) r[A[i]]:lastv) + 1, v);
t[A[i]] = i;
}
else {
lastv = v;
lastt = i;
}
}
for (i = 0; i < N; ++i) {
if (lastt > t[i]) {
r[i] = lastv;
}
}
return r;
}
其实时间戳可以省略,代码如下:
[cpp]
// you can also use includes, for example:
// #include
vector solution(int N, vector &A) {
// write your code here...
int i,m = A.size(), lastv = 0, v = 0;
vector r;
r.resize(N , 0);
for (i = 0; i < m; ++i) {
if (--A[i] < N) {
v = max(v, r[A[i]] = max(r[A[i]], lastv) + 1);
}
else {
lastv = v;
}
}
for (i = 0; i < N; ++i) {
r[i] = max(r[i], lastv);
}
return r;
}
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: