相关疑难解决方法(0)

在数组中查找连续范围

您将获得一个整数数组.您必须输出最大范围,以便该范围内的所有数字都存在于数组中.这些数字可能以任何顺序出现.例如,假设数组是

{2, 10, 3, 12, 5, 4, 11, 8, 7, 6, 15}
Run Code Online (Sandbox Code Playgroud)

在这里,我们找到两个(非平凡的)范围,这些范围中的所有整数都存在于数组中,即[2,8]和[10,12].其中[2,8]是较长的一个.所以我们需要输出它.

当我收到这个问题时,我被要求在线性时间内完成此操作而不使用任何排序.我认为可能存在基于散列的解决方案,但我无法想出任何东西.

这是我尝试解决方案:

void printRange(int arr[])
{
    int n=sizeof(arr)/sizeof(int);
    int size=2;
    int tempans[2]; 

    int answer[2];// the range is stored in another array
    for(int i =0;i<n;i++)
    {
        if(arr[0]<arr[1])
        {
             answer[0]=arr[0];
             answer[1]=arr[1];
        }
        if(arr[1]<arr[0])
        {
            answer[0]=arr[1];
            answer[1]=arr[0];
        }

        if(arr[i] < answer[1])
            size += 1;
        else if(arr[i]>answer[1]) {
            initialize tempans to new range;
             size2=2;
        }
        else { 
            initialize tempans  to new range
        }
}

//I have to check when the count …
Run Code Online (Sandbox Code Playgroud)

arrays algorithm time-complexity space-complexity

16
推荐指数
2
解决办法
1万
查看次数