После того, как я отправил свое решение проблемы максимального подмассива на leetcode, он сказал, что мое время выполнения составляет 1 мс (превышение ~ 66% представлений), затем я внес пару изменений и повторно отправил. На этот раз время выполнения было 0 мс (превышение ~ 100%). Не совсем понимаю, что способствовало сокращению времени. Вот две версии.
Оригинал:
public int maxSubArray(int[] nums) {
if (nums == null) return 0;
if (nums.length == 1) return nums[0];
int current_max = nums[0];
int cur = 1;
int max = current_max;
while (cur < nums.length) {
current_max = Math.max(nums[cur] + current_max, nums[cur]);
if (current_max > max) {
max = current_max;
}
cur++;
}
return max;
}
Обновлено:
public int maxSubArray(int[] nums) {
if (nums == null) return 0;
int l = nums.length;
if (l == 1) return nums[0];
int current_max = nums[0];
int max = current_max;
for (int i = 1; i < l; i++) {
current_max = Math.max(nums[i] + current_max, nums[i]);
if (current_max > max) {
max = current_max;
}
}
return max;
}
Единственные два изменения, которые я сделал:
- Изменение while l oop на a для l oop - По-видимому, нет никакой разницы ref
- Сохраните длину в отдельной переменной - поскольку Array не вычисляет длину и
array.length
- это только выборка из внутренней переменной, здесь я тоже не вижу разницы.
[EDIT]
Согласен. leetcode работает не на 100%. Забавно, на днях я снова отправил свой обновленный код, и внезапно теперь он 0 мс.