Правила[Одномерные массивы]Дана последовательность чисел a1, a2, ..., an. Указать наименьшую длину числовой оси, содержащую все эти числа.Любителям сладостей: почему бы не сделать это через варарг?! ;)
0
Комментарии (28)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Проходит тестовые примеры terranum, но во мне есть внутреннее сомнение, что при (0,0) должно возвращать 1, так как оба этих значения в одной точки и им никакая ось не нужна для отображения:)
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;
}
Пытался мыслить логически, не факт что получилось, жара.
Есть три примера от «заказчика», при чем ранее реализованные условия его явно не удовлетворяют.
(0, 2, 5)
(0, 1, 2, 3, 4, 5)
(-1000, 1000, 1001)
В условии значится
Указать наименьшую длину числовой оси, содержащую все эти числа
Длинна оси это разница максимума и минимума, но что такое наименьшая длинна числовой оси? Все до чего я додумался, ось состоит из отрезков не равных между собой по длине, необходимо найти самый маленький отрезок, он то и будет наименьшей длинной числовой оси. Вот как бы и реализация этого.
Да я тоже весь гугл облазил, штуки три реализации просмотрел, комментарии прочитал, все сводится к мин максу. Ответ знает только terranum . Ждем его комментариев =))
Хотя при одном элементе это как бы и не ось получается, но в противном случае либо выбрасывать исключение ArrayIndexOutOfBoundsException либо вывести значение.
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];
}
Вообще через sort мне нравиться. Сообщение «Empty array» лучше поменять на что-то типа bad args, мы же массив в метод не принимаем, народ вот и спросит «Какой такой массив? Я тебе вот числа дал.», а если принимать int[] arr то очень даже норм. Или так или так. :)
Так, школы, институты заканчивал давно, по профессии не работаю, с математикой не связан. Так что больно не пинайте, не могу я понять смысл задания. Прямая превращается в числовую ось, если есть точка отсчета (в нашем случае это min значение) и положительное направление направление, это у нас элементы массива либо же данная последовательность чисел. Длина числовой оси, это разница между нулевой точкой и крайней точкой этой оси. В нашем случае разница min и max, тогда в чем ошибка или неточность у Docktor91 ? Если же под наименьшей длинной числовой оси подразумевается разница между минимальным значением и ближайшим к нему элементом, тогда в чем ошибка у меня? terranum ты хоть пример вывода какого то дай. мол с такими то параметрами должен быть такой вывод, а то что то не гугл, не мозги не дают понять что требуется.
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, но во мне есть внутреннее сомнение, что при (0,0) должно возвращать 1, так как оба этих значения в одной точки и им никакая ось не нужна для отображения:)
как это?? почему это??
%)
Есть три примера от «заказчика», при чем ранее реализованные условия его явно не удовлетворяют.
В условии значится
Длинна оси это разница максимума и минимума, но что такое наименьшая длинна числовой оси? Все до чего я додумался, ось состоит из отрезков не равных между собой по длине, необходимо найти самый маленький отрезок, он то и будет наименьшей длинной числовой оси. Вот как бы и реализация этого.
нутром чую не то))
вот даже спецом в гугл залез, и что ты думаешь???
это макс-мин…
Предположим отсортированный массив получился {-1000, 1000, 1001} что тогда вернет метод?
Вот мое видение решения:
По сути мы возвращаем длину строго растущей последовательности(каждый след элемент превышает предыдущий на единицу) содержащей все числа аргумента.
Как то так?
я ваще правильно понял?
Ты в Intellij IDEA пишешь?
поидее должно пять вернуть
ведь минимальный это точка отсчета…