Нахождение непрерывных диапазонов в массивах

Вам дан массив целых чисел. Вы должны вывести самый большой диапазон, чтобы все числа в диапазоне присутствовали в массиве. Цифры могут присутствовать в любом порядке. Например, предположим, что массив равен

{2, 10, 3, 12, 5, 4, 11, 8, 7, 6, 15}

. Здесь мы находим два (нетривиальных) диапазона, для которых все целые числа в этих диапазонах присутствуют в массиве, а именно [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 becomes equal to the diff of the range

Я застрял в этой части ... Я не могу понять сколько массивов tempanswer [] следует использовать.

16
задан templatetypedef 25 August 2011 в 07:39
поделиться