【发布时间】:2015-02-05 13:36:31
【问题描述】:
给定一个大小为 N 的数组 A,我需要计算这样的三元组 (i,j,k),这样:
Condition 1 : i < j < k
Condition 2 : A[i] > A[j] > A[k]
我知道一个O(N^3) 解决方案来做到这一点。他们可以像O(N) 或O(NlogN) 解决这个问题,因为N 可以达到100000
示例:设N=4 和数组为[4,3,2,1],则答案为4,如{4,3,2}、{4,3,1}、{4,2,1} 和{3,2,1} 都是可能的答案
如何找到给定N 和数组A 的计数?
我的方法:
int n;
cin>>n;
vector<int> A(n);
for(int i=0;i<n;i++){
cin>>A[i];
}
int count=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
if(A[i]>A[j] && A[j]>A[k]){
count++;
}
}
}
}
cout<<count<<"\n";
【问题讨论】:
-
重复项应该怎么做? [4,2,2,1] 应该返回 1 还是 2?
-
@JonathanMee 问题陈述对我来说似乎很清楚:
A[0]>A[1]>A[3]和A[0]>A[2]>A[3],所以答案是2。它是“计算索引集......”,而不是“计算数组中的值集......”。 -
@JonathanMee 正确答案是 2
-
关于您的意见,您还能告诉我们什么?数字的范围是多少?
-
如果你不能自己解决,为什么不阅读an editorial。
标签: c++ algorithm dynamic-programming