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

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

Статья из группы Архив info.javarush
участников
Кухня(); Задание N46 - 1 Правила [Одномерные массивы] 46. Дан массив целых чисел. Найти в этом массиве минимальный элемент N и максимальный элемент M. Получить в порядке возрастания все целые числа из интервала (N; М), которые не входят в данный массив.
Комментарии (14)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Kashey
Уровень 11
12 сентября 2014, 00:44
Добавил проверку на пустой массив
public static void getIntNumberFromMinToMax (int[] array) {
        if (array.length == 0) System.out.println("Wrong data! Array is empty");
        else {
            Arrays.sort(array);
            for (int i = array[0]; i <= array[array.length - 1]; i++) System.out.print(i + " ");
        }
}
Vash_the_Stampede
Уровень 11
12 сентября 2014, 01:40
Я, возможно, сейчас сделаю больно, но нужно не все числа выводить, перечитай задание
Kashey
Уровень 11
12 сентября 2014, 10:02
Странные у тебя ассоциации с болью, когда тебя кто-то поправляет и указывает на неточность — ты испытываешь боль? Ну да ладно, у каждого свои тараканы.
Тогда так:
public static void getIntNumberFromMinToMax (int[] array) {
        if (array.length == 0) System.out.println("Wrong data! Array is empty");
        else {
            Arrays.sort(array);
            for (int i = array[0]; i <= array[array.length - 1]; i++) {
                if (Arrays.binarySearch(array, i) < 0) System.out.print(i + " ");
               
            }
        }
}
Vash_the_Stampede
Уровень 11
12 сентября 2014, 10:23
вот не надо факты из пальца высасывать. гы
Airon
Уровень 34
16 сентября 2014, 11:50
А зачем проверять то что итак уже известно что в массиве?
for (int i = array[0]; i <= array[array.length - 1]; i++)

for (int i = array[0] + 1; i < array[array.length - 1]; i++)

public static int[] lineNM(int... array) {
    int[] minmax = new int[]{Integer.MAX_VALUE, Integer.MIN_VALUE};
    int[] temp = new int[0];
    for(int x : array)
        minmax = new int[]{minmax[0] < x ? minmax[0] : x, minmax[1] > x ? minmax[1] : x};
    for (int i = minmax[0] + 1; i < minmax[1]; i++)
        if(Arrays.binarySearch(array, i) < 0) {
            temp = Arrays.copyOf(temp, temp.length + 1);
            temp[temp.length - 1] = i;
        }
    return temp;
}
Kashey
Уровень 11
16 сентября 2014, 12:25
Сделал так, потому, что сначала неправильно понял задание и выводил все числа от мин до макс, а потом добавил проверку на наличие в массиве.
ЗЫ. У тебя не работает код.
Airon
Уровень 34
16 сентября 2014, 12:31
ну в IDEA и c JDK 7 работает.
ЗЫ: опишите как он не работает?
Kashey
Уровень 11
16 сентября 2014, 12:33
твой код:
public class Solution
{
    public static void main(String[] args)
    {
        int[] array = {10, 11, 5, 0, -2, 9, 3, 8, 4, 10};
        int[] arr = lineNM(array);
        for (int i : arr) System.out.print(i + " ");
    }

    public static int[] lineNM(int... array)
    {
        int[] minmax = new int[]{Integer.MAX_VALUE, Integer.MIN_VALUE};
        int[] temp = new int[0];
        for (int x : array)
            minmax = new int[]{minmax[0] < x ? minmax[0] : x, minmax[1] > x ? minmax[1] : x};
        for (int i = minmax[0] + 1; i < minmax[1]; i++)
            if (Arrays.binarySearch(array, i) < 0)
            {
                temp = Arrays.copyOf(temp, temp.length + 1);
                temp[temp.length - 1] = i;
            }
        return temp;
    }
}

печатает:
"C:\Program Files\Java\jdk1.8.0_11\bin\java" -Didea.launcher.port=7545 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 13.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_11\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\ext\jaccess.jar;C:\Program
Airon
Уровень 34
16 сентября 2014, 12:38
И? «Получить в порядке возрастания все целые числа из интервала (N; М), которые не входят в данный массив.» N и M — элементы массива а не индекса.
Все верно -2, 10 и 11 входят в массив, потому и не печатает.
Kashey
Уровень 11
16 сентября 2014, 12:39
-1 правильно
0 неправильно
1, 2 правильно
3, 4, 5 неправильно
6, 7 правильно
9 неправильно
которые не входят в данный массив
Airon
Уровень 34
16 сентября 2014, 12:45
не во всех местах указано, что binarySearch правильно работает, только для отсортированного массива, что ж, вы молодцы, хотелось обойтись без сортировки.
Kashey
Уровень 11
16 сентября 2014, 12:51
Спасибо за подсказку, я об этом не занал :)
Searches the specified array for the specified object using the binary search algorithm.

The array must be sorted into ascending order according to the specified comparator (as by the sort(T[], Comparator) method) prior to making this call.

If it is not sorted, the results are undefined. If the array contains multiple elements equal to the specified object, there is no guarantee which one will be found.
Kashey
Уровень 11
12 сентября 2014, 00:09
public static void getIntNumberFromMinToMax (int[] array) {
        Arrays.sort(array);
        for (int i = array[0]; i <= array[array.length - 1]; i++) {
            System.out.print(i + " ");
        }
Vash_the_Stampede
Уровень 11
11 сентября 2014, 23:03
public static void method(int[] arr) {
    int[] temp = Arrays.copyOf(arr, arr.length);
    Arrays.sort(temp);
    for (int i = 0; i < temp.length - 1; i++) {
        for (int j = temp[i] + 1; j < temp[i + 1]; j++) {
            System.out.println(j);
        }
    }
}