JavaRush/Java блог/Архив info.javarush/Кухня(); Задание N6.
terranum
28 уровень

Кухня(); Задание N6.

Статья из группы Архив info.javarush
участников
Кухня(); Задание N6. - 1 Правила [Одномерные массивы] Дана последовательность чисел a1, a2, ..., an. Указать наименьшую длину числовой оси, содержащую все эти числа. Любителям сладостей: почему бы не сделать это через варарг?! ;)
Комментарии (28)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
timurnav
Уровень 21
7 октября 2015, 15:10
public static int method4(int... array) {
        if(array.length==0) return 0;
        Arrays.sort(array);
        return array[array.length-1] - array[0] + 1;
    }
RabenokDmitry
Уровень 21
5 февраля 2015, 22:32
<code>public static int getMinLengthAxe(int... arr) {
        if (arr.length <= 1)
            return 0;
        else {
            Arrays.sort(arr);
            return arr[arr.length - 1] - arr[0] + 1;
        }
    }</code>

Проходит тестовые примеры terranum, но во мне есть внутреннее сомнение, что при (0,0) должно возвращать 1, так как оба этих значения в одной точки и им никакая ось не нужна для отображения:)
Docktor91
Уровень 40
22 августа 2014, 20:10
я понял))

public static void getSize(int...arg)
{
    System.out.println(«is here->'наименьшая длина числовой оси, содержащая все эти числа'»);
} 
Voronblack
Уровень 17
22 августа 2014, 19:57
Все, наконец то я понял что требуется
public static int getMinRealAxis(int...arr)
        {
            int min = 0;

            if (arr.length == 0 )
                throw new IllegalArgumentException("Bad args");
            if (arr.length == 1 ) return arr[0];
            if (arr.length > 0)
                Arrays.sort(arr);
                min = arr[1] - arr[0];
                for (int i = 0; i < arr.length - 1; i++)
                 min = min > arr[i + 1] - arr[i] ? arr[i + 1] - arr[i] : min;
            
            return min;
        }
Docktor91
Уровень 40
22 августа 2014, 20:03
что это?? xD
как это?? почему это??
%)
Voronblack
Уровень 17
22 августа 2014, 20:11
Пытался мыслить логически, не факт что получилось, жара.
Есть три примера от «заказчика», при чем ранее реализованные условия его явно не удовлетворяют.
(0, 2, 5)
(0, 1, 2, 3, 4, 5)
(-1000, 1000, 1001)

В условии значится
Указать наименьшую длину числовой оси, содержащую все эти числа
Длинна оси это разница максимума и минимума, но что такое наименьшая длинна числовой оси? Все до чего я додумался, ось состоит из отрезков не равных между собой по длине, необходимо найти самый маленький отрезок, он то и будет наименьшей длинной числовой оси. Вот как бы и реализация этого.
Docktor91
Уровень 40
22 августа 2014, 20:22
не то это))
нутром чую не то))
вот даже спецом в гугл залез, и что ты думаешь???
это макс-мин…
Voronblack
Уровень 17
22 августа 2014, 20:27
Да я тоже весь гугл облазил, штуки три реализации просмотрел, комментарии прочитал, все сводится к мин максу. Ответ знает только terranum . Ждем его комментариев =))
terranum
Уровень 28
22 августа 2014, 23:27
Я не знаю ответа, решаю точно так же как и вы. Выше отписал что я об этом думаю. Давайте думать вместе, возможно я ошибаюсь.
Docktor91
Уровень 40
23 августа 2014, 03:22
для одного числа достаточно точки(а длина точки какая?)… не нужна ось, ось по сути множество значений.
Docktor91
Уровень 40
23 августа 2014, 03:24
по твоей же логике, ты считаешь сколько пересечений, имеют твои числа с осью координат
terranum
Уровень 28
23 августа 2014, 10:01
Я понял. Извиняюсь, что посеял смуту.:)
Voronblack
Уровень 17
22 августа 2014, 18:08
Немного подправил
public static int getMinRealAxis(int...arr)

    {
        if (arr.length == 0 )
            throw new IllegalArgumentException("Empty array");
        if (arr.length == 1 ) return arr[0];
        if (arr.length > 0)
            Arrays.sort(arr);
        return arr[1] - arr[0]     
    }
Voronblack
Уровень 17
22 августа 2014, 18:13
Хотя при одном элементе это как бы и не ось получается, но в противном случае либо выбрасывать исключение ArrayIndexOutOfBoundsException либо вывести значение.
Voronblack
Уровень 17
22 августа 2014, 17:43
Я понимаю правильно будет так?
public static int getMinRealAxis(int...arr)

    {
        if (arr.length <= 0 )
            throw new IllegalArgumentException("Empty array");
        if (arr.length > 0)
            Arrays.sort(arr);
        return arr[1] - arr[0];
    }
Docktor91
Уровень 40
22 августа 2014, 18:01
arr.length <= 0
меньше, это как??))))
Voronblack
Уровень 17
22 августа 2014, 18:03
Да как то автоматом, не задумываясь =))
Docktor91
Уровень 40
22 августа 2014, 18:05
return arr[1] — arr[0];
а разве не arr[length-1]-arr[0] должно быть, или я не правильно задание понял?
Voronblack
Уровень 17
22 августа 2014, 18:15
наименьшую длину
Я на это ориентировался, а наименьшая длина может получится только между двумя наименьшими элементами.
terranum
Уровень 28
22 августа 2014, 18:54
Указать наименьшую длину числовой оси, содержащую все эти числа.

Предположим отсортированный массив получился {-1000, 1000, 1001} что тогда вернет метод?
terranum
Уровень 28
22 августа 2014, 19:00
Вообще через sort мне нравиться. Сообщение «Empty array» лучше поменять на что-то типа bad args, мы же массив в метод не принимаем, народ вот и спросит «Какой такой массив? Я тебе вот числа дал.», а если принимать int[] arr то очень даже норм. Или так или так. :)
Voronblack
Уровень 17
22 августа 2014, 19:24
Так, школы, институты заканчивал давно, по профессии не работаю, с математикой не связан. Так что больно не пинайте, не могу я понять смысл задания. Прямая превращается в числовую ось, если есть точка отсчета (в нашем случае это min значение) и положительное направление направление, это у нас элементы массива либо же данная последовательность чисел. Длина числовой оси, это разница между нулевой точкой и крайней точкой этой оси. В нашем случае разница min и max, тогда в чем ошибка или неточность у Docktor91 ? Если же под наименьшей длинной числовой оси подразумевается разница между минимальным значением и ближайшим к нему элементом, тогда в чем ошибка у меня? terranum ты хоть пример вывода какого то дай. мол с такими то параметрами должен быть такой вывод, а то что то не гугл, не мозги не дают понять что требуется.
terranum
Уровень 28
22 августа 2014, 23:24
Народ! Не хочу никого путать, может я не так понимаю решение.
Вот мое видение решения:

getMinRealAxis(); // rerurn 0;
getMinRealAxis(x); // rerurn 1;
getMinRealAxis(0, 0); // rerurn 1;
getMinRealAxis(0, 2, 0, 2); // rerurn 3;
getMinRealAxis(2, 6, 7); // rerurn 6;
getMinRealAxis(-2, 10); // rerurn 13;
getMinRealAxis(1, 10, 13, 15, 1000, 15, 55, 88, 66); // rerurn 1000;

По сути мы возвращаем длину строго растущей последовательности(каждый след элемент превышает предыдущий на единицу) содержащей все числа аргумента.
Docktor91
Уровень 40
22 августа 2014, 15:14
public static int getSize(int... arr)
{
    if (arr.length==0)
        return 0;      //ну или ексепшен можно кинуть
    int min=arr[0];
    int max=arr[0];
    for (int i:arr)
    {
        min=i<min?i:min;
        max=i>max?i:max;
    }
    return max-min;
}

Как то так?
я ваще правильно понял?
terranum
Уровень 28
22 августа 2014, 17:26
Как по твоему что должно получиться если вот такое попробуем?
System.out.println(getSize(0, 2, 5));

Ты в Intellij IDEA пишешь?
Docktor91
Уровень 40
22 августа 2014, 18:00
нет, не в идее, так… по памяти))
поидее должно пять вернуть
terranum
Уровень 28
22 августа 2014, 18:46
0 1 2 3 4 5 какая длинна числовой оси?)
Docktor91
Уровень 40
22 августа 2014, 19:07
поидее 5… я понимаю что ты клонишь, что шесть… НО
ведь минимальный это точка отсчета…