Ниже приведены несколько методов для введения количества номеров массива Java. Конкретный контент заключается в следующем:
Метод 1:
Сортировка массива, а затем промежуточное значение, безусловно, является значением. Сортируйте минимальную сложность времени (быстрая сортировка) O (NLOGN), плюс обход.
Метод 2:
Используя метод хэш -таблицы, то есть подсчет количества вхождения каждого массива и вывода чисел, чьи случаи превышают длину массива.
Метод 3:
Количество случаев превышает половину длины массива, что указывает на то, что это число появляется больше раз, чем сумма других чисел.
Рассмотрим удаление двух разных чисел каждый раз, количество случаев в оставшихся числах все еще превышает общее количество. Повторите процесс постоянно, исключайте другие числа и, наконец, найдите число с более чем половиной вхождений. Временная сложность этого метода - O (n), а сложность пространства - O (1).
Чтобы изменить идею, это может быть достигнуто посредством подсчета, а не реального физического удаления. В процессе пересечения массива сохраните два значения, одно - это число в массиве, а другое - это количество случаев. При прохождении к следующему числу, если это число такое же, как и ранее сохраненное число, количество раз увеличивается на 1, и если оно отличается, количество раз уменьшается на 1. Если количество раз составляет 0, сохраняет следующее число и установите номер на 1. Поскольку число, которое мы ищем, появляется больше раз, чем сумма других чисел, но число, которое мы ищем, должен быть соответствующим номером.
public int morehalf (int [] nums) {int result = 0; int count = 1; if (nums.length == 0) return -1; result = nums [0]; for (int i = 1; i <nums.length; i ++) {if (count == 0) {result = nums [i]; count = 1; eRement; if (result == nums [i] le; результат;}Метод 4:
Улучшенная сортировка быстрого ряда, упомянутая ранее, если массив сортируется, число в среднем положении должно быть желаемым значением. Сложность временной сортировки массивов - O (Nlog (N)), но для этого вопроса есть лучшие алгоритмы, которые можно найти в рамках сложности времени O (n).
Вытекающий из алгоритма быстрой сортировки, метод Partition () является наиболее важным методом. Этот метод возвращает индекс, который может убедиться, что число в положении индекса отсортировано. Число слева от индекса меньше, чем число, где расположен индекс, а число справа от индекса больше, чем число, где расположен индекс. Затем этот вопрос может быть решен с помощью этой идеи.
Индекс возврата через раздел (). Если index == Mid, это означает, что медиана массива была найдена; Если индексмид, это означает, что медиана находится между [Start, Index-1]. Я знаю, что конец индекса == Mid -петля получается.
public int partition (int [] nums, int start, int end) {int pivotkey = nums [start]; int ouring = start; while (start <end) {while (start <end && nums [end]> = pivotkey) end-; while (nerm <end && nums [start] <pivotke Swap (Nums, Start, End); Swap (Nums, Origin, End); return End;} p int [] swap (int [] ints, int x, int y) {int temp = ints [x]; ints [x] = ints [y]; ints [y] = temp; вернуть INT; } public int morethanhalf (int [] nums) {if (nums.length == 0) return -1; int start = 0; int end = nums.length -1; int index = partition (nums, ind, end); int mid = nums.length/2; while (индекс! Index-1 section = раздел (nums, start, index-1); else {// в противном случае отрегулируйте индекс массива индекса+1 в раздел end = раздел (nums, index+1, end);}} return nums [index];}Приведенный выше контент вводит соответствующий содержимое кода Java, который реализует номера, появляющиеся более половины времени в массиве. Я надеюсь, что это будет полезно для всех!