Сравнение скорости алгоритмов на Go, PHP, Ruby, JS, Python на leetcode.Как правило, Go - чемпион, он работает в 20 раз быстрее, чем Python, и использует в несколько раз меньше памяти.Но когда я решаю эту задачу, я обнаруживаю, что это решение Go наиболее подвержено ресурсам.Это требует так много времени и памяти.
Пожалуйста, объясните, почему это происходит.Может быть, я выполняю какой-то жадный код ресурса в Go в текущем рекурсивном решении?
Go: 104 мс, 137,9 МБ
func sortedArrayToBST(nums []int) *TreeNode {
if 0 == len(nums){
return nil
}
mid := len(nums)/2
return & TreeNode{Val: nums[mid], Left: sortedArrayToBST(nums[0:mid]), Right: sortedArrayToBST(nums[mid+1:]) }
}
Python: 84 мс, 16,2 МБ
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
if 0 == len(nums): return None
mid = int(len(nums)/2)
answer = TreeNode(nums[mid])
answer.left = self.sortedArrayToBST(nums[0:mid])
answer.right = self.sortedArrayToBST(nums[mid+1:])
return answer
JS: 72 мс, 37,6 МБ
var sortedArrayToBST = function(nums) {
if( 0 == nums.length) return null;
let middle = parseInt(nums.length/2)
let ans = new TreeNode(nums[middle])
ans.left = sortedArrayToBST(nums.slice(0,middle))
ans.right = sortedArrayToBST(nums.slice(middle+1))
return ans;
};
Вот пример стандартного быстрого выполнения Go для задачи рекурсии: https://gist.github.com/lbvf50mobile/15751618dd514385b2dd601155a3aca9