为啥逻辑适用于函数但不使用类,合并排序算法
Posted
技术标签:
【中文标题】为啥逻辑适用于函数但不使用类,合并排序算法【英文标题】:Why the logic works with functions but not using Classes, Merge sort algorithm为什么逻辑适用于函数但不使用类,合并排序算法 【发布时间】:2022-01-17 11:28:35 【问题描述】:我使用函数实现了归并排序,它按预期工作。但是,当包装在一个类中时,它会给出 Time Limit Exceeded 错误。我认为这与类对象的底层内存分配方式有关,有人可以帮我详细了解导致这种情况的原因吗?
# 2 ------ Using Class
class Solution:
def mergeSortedLists(self, nums, start, mid, end):
l1 = nums[start: mid+1]
l2 = nums[mid+1: end+1]
i, j = 0, 0
while i < len(l1) and j < len(l2):
if l1[i] < l2[j]:
nums[start] = l1[i]
i += 1
else:
nums[start] = l2[j]
j += 1
start += 1
if i < len(l1):
nums[start:end + 1] = l1[i:]
else:
nums[start:end + 1] = l2[j:]
def mergeSort(self, nums, start, end):
while start < end:
mid = (start + end) // 2
self.mergeSort(nums, start, mid)
self.mergeSort(nums, mid + 1, end)
self.mergeSortedLists(nums, start, mid, end)
def sortArray(self, nums):
return self.mergeSort(nums, 0, len(nums) - 1)
a= Solution()
print(a.sortArray([7,6,4,3,2,1]))
【问题讨论】:
【参考方案1】:删除类包装器无法使其成为正确的排序。 mergeSort
中的 while 循环毫无意义。 start
和 end
永远不会改变。你想要:
def mergeSort(self, nums, start, end):
if start >= end:
return
mid = (start + end) // 2
self.mergeSort(nums, start, mid)
self.mergeSort(nums, mid + 1, end)
self.mergeSortedLists(nums, start, mid, end)
小测试存根也只能打印None
。在这里你想要:
nums = [7,6,4,3,2,1]
Solution().sortArray(nums)
print(nums)
【讨论】:
以上是关于为啥逻辑适用于函数但不使用类,合并排序算法的主要内容,如果未能解决你的问题,请参考以下文章