сегодня я слышал об этом сайте, называемом codility, где пользователь может дать различные тесты для проверки производительности своего кода.повышение производительности кодообразования
Когда я начинал, они представили мне с этим испытанием образца,
Описание задачи Маленькая лягушка хочет, чтобы добраться до другой стороны дороги . Лягушка в настоящее время находится в положении X и хочет получить до положение, большее или равное Y. Маленькая лягушка всегда прыгает на фиксированное расстояние , D. Подсчитайте минимальное количество прыжков, которые должна выполнить лягушка , чтобы достичь его цель.
Написать функцию:
class Solution { public int solution(int X, int Y, int D); }
, что, учитывая три целых числаX
,Y
иD
, возвращает минимальное количество прыжков с позицииX
в положение, равное или большее, чемY
.Например, дано:
X = 10
Y = 85
D = 30
функция должна возвращать3
, , потому что лягушки будут расположены следующим образом:после первого прыжка, в положении 10 + 30 = 40
после второго прыжка, в положении 10 + 30 + 30 = 70
после третьего прыжка, в положении 30 + 10 + 30 + 30 = 100
Предположим, что: X, Y и D представляют собой целые числа в диапазоне
[1..1,000,000,000]; X ≤ Y. Сложность: ожидаемое наихудшее время
сложность O (1); ожидаемая наихудшая пространственная сложность - O (1).
Вопрос был довольно прямо вперед, и он взял меня, как 2 минуты, чтобы написать решение, которое следующий,
class Solution {
public int solution(int X, int Y, int D) {
int p = 0;
while (X < Y){
p++;
X = X + D;
}
return p;
}
}
Однако результат теста показывает, что производительность моего кода просто 20%
и я забил только 55%
,
Вот ссылка на результат, https://codility.com/demo/results/demo66WP2H-K25/
Это был такой простой код, где я только что использовал одиночный цикл while
, как это могло быть сделано намного быстрее?
Используйте разделение? Вы должны пройти 2389 метров. Каждый шаг, который вы делаете, составляет 1 метр. Сколько шагов вам нужно? –
Основываясь на комментарии @ JB, вас спрашивают, сколько раз D идет в Y-X (округляется, если есть какой-либо остаток). – kgh
В C: return (y-x)/d + ((y-x)% d! = 0); – fukanchik