Для теста проверки безопасности PermCheck я закодировал одно решение (см. Ниже), но оно действительно реально разрешило пример, приведенный в тесте кодовости, потому что в массиве имеется только несколько значений и небольшие значения , Я также добавил код ниже, который набрал 100%, это код, который я нашел в Интернете. Этот код очень сильно отличается от моего, и я не мог понять, как он/она смог получить ответ. Может кто-то, пожалуйста, объясните код шаг за шагом и как это приведет к ответу, пожалуйста.Java - помощь с пониманием кода кодообразования
Codility Тест:
PermCheck
Проверить массив А является ли перестановка.
Дается непустой нуль-индексированный массив A, состоящий из N целых чисел.
Перестановка - это последовательность, содержащая каждый элемент от 1 до N один раз и только один раз.
Например, массив A
таким образом, что:
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
перестановка, но массив A
таким образом, что:
A[0] = 4
A[1] = 1
A[2] = 3
не перестановка, так как значение 2 отсутствует.
Целью является проверка того, является ли массив A
перестановкой.
Написать функцию:
class Solution {
public int solution(int[] A);
}
, что при нулевой индексированный массив A
, returns 1
если массив A
является перестановкой и 0
, если это не так.
Например, если массив А, что:
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
функция должна вернуть 1.
Учитывая массив А, что:
A[0] = 4
A[1] = 1
A[2] = 3
функция должна возвращать 0.
Предположим, что:
- N - целое число в диапазоне [1..100'000];
- Каждый элемент массива A является целым числом в диапазоне [1..1'000'000'000].
Сложность:
- Ожидаемая сложность в худшем случае время O (N)
- Ожидаемое наихудший пространство сложность O (N), за хранение входного сигнала (не считая хранения необходимых для входных аргументов).
- Элементы входных массивов могут быть изменены.
100% Score Решение (найдено из Интернета):
public static final int NOT_PERMUTATION = 0;
public static final int PERMUTATION = 1;
// (4,1,3,2) = 1
// (4,1,3) = 0
// (1) = 1
//() = 1
// (2) = 0
public int PermSolution(int[] A) {
// write your code in Java SE 8
int[] mark = new int[A.length + 1];
int counter = 0;
for (int i = 0; i < A.length; ++i) {
int value = A[i];
if(value >= mark.length) {
return NOT_PERMUTATION;
}
if(mark[value] == 0) {
mark[value]=1;
++counter;
} else {
return NOT_PERMUTATION;
}
}
return counter == A.length ? PERMUTATION : NOT_PERMUTATION;
}
Мое решение:
public int PermSolution(int[] A)
{
int perm = 1;
Arrays.sort(A);
if (A[0] != 1) return 0;
for (int i = 0; i < A.length; i++)
{
if (A[i] + 1 == A[i + 1])
{
return perm;
}
if (A[i] + 1 != A[i + 1])
{
return 0;
}
}
return perm;
}
Подсказка: в чем сложность 'Массивы.sort (A) '? –
Это не курсовая/домашняя работа. Это то, что я делаю в свое время. Я не понимаю, что такое stackoverflow, если он не используется для получения помощи от других кодеров? Задача проста, если код слишком сложно для других, чтобы понять тоже? – user2886115
@ user2886115 не беспокойтесь об одном грубом комментарии, отметьте его, если вы чувствуете. На самом деле ваш вопрос хорошо сформирован, но не ясен. * Работает ли ваше разрешение? *, Если нет ... где вы застряли ?, если да, вы должны поставить этот вопрос на http://codereview.stackexchange.com/ –