Arrays 从该索引开始计算连续子阵列

Arrays 从该索引开始计算连续子阵列,arrays,algorithm,maxlength,sub-array,Arrays,Algorithm,Maxlength,Sub Array,我有一个数组a,需要一个与a大小相同的数组B,其中B[I]表示从a[I]开始的连续子数组的长度,其中所有元素都小于或等于a[I] 范例 输出 说明: 对于[2]=4,有一个元素为{4,2,4}的子数组;对于[5]=5,有一个元素为{5,1}的子数组;对于[7]=6,有一个元素为{6}的子数组复杂性:On 找不到任何问题。似乎如果你复制粘贴了你的家庭作业,并想要一个答案,你可以复制粘贴并提交作为你的家庭作业。这种问题在这里不太受欢迎。尝试添加您尝试过的内容以及失败的原因。另外,我已经把这个问题作为

我有一个数组a,需要一个与a大小相同的数组B,其中B[I]表示从a[I]开始的连续子数组的长度,其中所有元素都小于或等于a[I]

范例

输出

说明:

对于[2]=4,有一个元素为{4,2,4}的子数组;对于[5]=5,有一个元素为{5,1}的子数组;对于[7]=6,有一个元素为{6}的子数组

复杂性:On


找不到任何问题。似乎如果你复制粘贴了你的家庭作业,并想要一个答案,你可以复制粘贴并提交作为你的家庭作业。这种问题在这里不太受欢迎。尝试添加您尝试过的内容以及失败的原因。另外,我已经把这个问题作为子问题解决了。
A={1,3,4,2,4,5,1,6} 
B={1,1,3,1,1,2,1,1} 
You can apply below algorithm to get the answer for your problem:-

Array B =[]; //initialize blank array
for (int i=0; i< A.length(); i++)
{
    j=i;
    length=1;
    while(i< A.length()-1)
    {
        j++;
        if(A[j]<=A[i])
            length++;
        else
            break;
    }
B[i]= length;
}

Print B // This will give you the similar array as of Array "A". 
#include <iostream>
#include <fstream>
using namespace std;

#define max 10000

int main(int argc, const char * argv[]) {

    ifstream input("/Users/appleuser/Documents/Developer/xcode projects/SubArrayCount/SubArrayCount/input.in");

    int n, arr[max], after[max]={0};
    input >> n;
    for (int i=0; i<n; i++)
        input >> arr[i];

    for (int i=n-1;i>=0;i--)
        for (int j=i+1;j<n&&arr[j]<=arr[i];j+=after[j]+1)
        {
            if (arr[j]==arr[i])
            {
                after[i]++;
                break;
            }
            after[i]+=after[j]+1;
        }


    for (int i=0; i<n; i++)
        cout << after [i] << " ";
    cout << endl;

    return 0;
}