Я пытаюсь решить упражнение Java на веб-странице Codility.
Ниже приведена ссылка на упомянутое упражнение и мое решение.
https://codility.com/demo/results/demoH5GMV3-PV8
Кто-нибудь может сказать, что я могу исправить в своем коде, чтобы улучшить оценку?
На всякий случай вот описание задачи:
Маленькая лягушка хочет добраться до другой стороны реки. В настоящее время лягушка находится в положении 0 и хочет попасть в положение X. Листья падают с дерева на поверхность реки.
Вам предоставляется непустой нуль-индексированный массив A, состоящий из N целых чисел, представляющих падающие листья. A [K] представляет положение, в котором один лист падает в момент времени K, измеряемый в минутах.
Цель состоит в том, чтобы найти самое раннее время, когда лягушка может прыгнуть на другую сторону реки. Лягушка может пересекаться только тогда, когда листья появляются в каждом положении через реку от 1 до X.
Например, вам присваивается целое число X = 5 и массив A, для которых:
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
В минуту 6 лист попадает в положение 5. Это самое раннее время, когда листья появляются в каждом положении через реку.
Напишите функцию:
class Solution { public int solution(int X, int[] A); }
что, учитывая непустой нуль-индексированный массив A, состоящий из N целых чисел и целого X, возвращает самое раннее время, когда лягушка может перепрыгнуть на другую сторону реки.
Если лягушка никогда не сможет прыгнуть на другую сторону реки, функция должна вернуть -1.
Например, если заданы X = 5 и массив A такие, что:
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
функция должна возвращать 6, как объяснялось выше. Предположим, что:
N and X are integers within the range [1..100,000];
each element of array A is an integer within the range [1..X].
Сложность:
expected worst-case time complexity is O(N);
expected worst-case space complexity is O(X), beyond input storage (not counting the storage required for input arguments).
Элементы входных массивов могут быть изменены.
И вот мое решение:
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int X, int[] A) {
int list[] = A;
int sum = 0;
int searchedValue = X;
List<Integer> arrayList = new ArrayList<Integer>();
for (int iii = 0; iii < list.length; iii++) {
if (list[iii] <= searchedValue && !arrayList.contains(list[iii])) {
sum += list[iii];
arrayList.add(list[iii]);
}
if (list[iii] == searchedValue) {
if (sum == searchedValue * (searchedValue + 1) / 2) {
return iii;
}
}
}
return -1;
}
}