Вам задан массив целых чисел. Вы должны вывести наибольший диапазон, чтобы все числа в диапазоне присутствовали в массиве. Номера могут присутствовать в любом порядке. Например, предположим, что массив
{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 [] должно использоваться.