Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找数组中所有元素的最新最小元素的位置_C++_Arrays_C++14 - Fatal编程技术网

C++ 查找数组中所有元素的最新最小元素的位置

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] =

我想计算,对于一个整数元素数组,小于该元素的最新元素的位置(如果可能的话),否则在这里存储-1

我所说的最新元素是指最大的可能指数小于当前指数

例如

(基于0索引)

问题[5]={4,7,1,3,8}

然后sol
array={-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] << ' ';