C++ 查找数组中所有元素的最新最小元素的位置
我想计算,对于一个整数元素数组,小于该元素的最新元素的位置(如果可能的话),否则在这里存储-1 我所说的最新元素是指最大的可能指数小于当前指数 例如 (基于0索引) 让C++ 查找数组中所有元素的最新最小元素的位置,c++,arrays,c++14,C++,Arrays,C++14,我想计算,对于一个整数元素数组,小于该元素的最新元素的位置(如果可能的话),否则在这里存储-1 我所说的最新元素是指最大的可能指数小于当前指数 例如 (基于0索引) 让问题[5]={4,7,1,3,8} 然后solarray={-1,0,-1,2,3} 现在我能够在O(n^2)时间复杂度下完成这项工作……但我无法在低于此时间复杂度的情况下完成这项工作。 所以,谁能告诉我如何在不到O(n^2)的时间复杂度内完成这项工作 我的n^2时间复杂度代码: int n = 5; int ques[n] =
问题[5]={4,7,1,3,8}
然后solarray={-1,0,-1,2,3}
现在我能够在O(n^2)时间复杂度下完成这项工作……但我无法在低于此时间复杂度的情况下完成这项工作。
所以,谁能告诉我如何在不到O(n^2)的时间复杂度内完成这项工作
我的n^2时间复杂度代码:
int n = 5;
int ques[n] = {4, 7, 1, 3, 8};
int sol[n] = { -1, -1, -1, -1, -1};
for (int i = 1; i < 5; i++) {
int pos;
for (int j = 0; j < i; j++) {
pos = -1;
if (ques[j] < ques[i]) {
pos = j;
}
}
sol[i] = pos;
}
for (int i = 0; i < n; i++){
cout << sol[i] << ' ';
}
int n=5;
int ques[n]={4,7,1,3,8};
int sol[n]={-1,-1,-1,-1};
对于(int i=1;i<5;i++){
int pos;
对于(int j=0;jcout您可以利用堆栈数据结构,其中包含等待较小前兆的元素索引。这种方法是线性的
Make a stack `S`
Scan array `Q[]` from the end
while (Q[i] < Q[S.top()])
t = S.Pop()
Sol[t] = i
Push i onto stack
Write -1 into Sol[] for all indices remaining in the stack
制作一个堆栈'S`
从末尾扫描数组'Q[]`
而(Q[i]
代码
#包括
#包括
使用名称空间std;
int main(){
int n=5;
int ques[]={4,7,1,3,8};
int sol[]={-1,-1,-1,-1};
堆栈s;
对于(int i=n-1;i>=0;i--){
而(s.size()>0&&ques[i] 你的意思是“[5]={4,7,3,1,8}那么sol array={-1,0,-1,-1,3}”吗?你能和我们分享一下O(n^2)的解吗还有一些你试图以更少的复杂性来解决问题的尝试?我很抱歉!!我在问题中做了编辑。请不要否决这个问题…我是编程界的新手。投票不是针对你的。他们是针对这个问题的。他们是衡量我们认为这个问题写得有多好、有多好和有多有用的我向社区致意。不管怎样,自从你编辑了这个问题,我已经删除了我的反对票。
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n = 5;
int ques[] = { 4, 7, 1, 3, 8 };
int sol[] = { -1, -1, -1, -1, -1 };
stack<int> s;
for (int i = n - 1; i >= 0; i--) {
while (s.size() > 0 && ques[i] < ques[s.top()]) {
int t = s.top();
sol[t] = i;
s.pop();
}
s.push(i);
}
for (int i = 0; i < n; i++)
cout << sol[i] << ' ';