出于某種原因,我的代碼是“超過限制時間”,當我在自己的編譯器上運行時,它永遠不會停止。任何人都可以弄清楚如何解決它嗎?
from typing import List
class Solution:
def mergeSort(self, nums: List[int], left: int, right: int) -> List[int]:
if (left == right):
return [nums[left]]
answer = []
mid = left (right - left)//2
leftArr = self.mergeSort(nums, left, mid)
rightArr = self.mergeSort(nums, mid 1, right)
pointer1, pointer2 = 0 ,0
while ((pointer1 < len(leftArr)) & (pointer2 < len(rightArr))):
if (self.hashmap[leftArr[pointer1]] > self.hashmap[rightArr[pointer2]]):
answer.append(leftArr[pointer1])
pointer1 = 1
elif (self.hashmap[leftArr[pointer1]] < self.hashmap[rightArr[pointer2]]):
answer.append(rightArr[pointer2])
pointer2 = 1
elif (self.hashmap[leftArr[pointer1]] == self.hashmap[rightArr[pointer2]]):
if (leftArr[pointer1] > rightArr[pointer2]):
answer.append(leftArr[pointer1])
pointer1 = 1
elif (leftArr[pointer1] < rightArr[pointer2]):
answer.append(rightArr[pointer2])
pointer2 = 1
while (pointer1 >= len(leftArr)) & (pointer2 < len(leftArr)):
answer.append(rightArr[pointer2])
pointer2 = 1
while (pointer1 <= len(leftArr)) & (pointer2 > len(leftArr)):
answer.append(leftArr[pointer1])
pointer1 = 1
return answer
def frequencySort(self, nums: List[int]) -> List[int]:
"""
step1: build a hashmap, key is the numbers in array, value is the freqency (N)
step2:
1. sort it first by the assending order of frequency and desending order
"""
hashmap = dict()
left, right = 0, len(nums)-1
for i in range(0, len(nums)):
if (nums[i] not in hashmap.keys()):
hashmap[nums[i]] = 1
else :
hashmap[nums[i]] = 1
self.hashmap = hashmap
return self.mergeSort(nums, left, right)
我不知道為什么它需要我更多的單詞,所以我在那里輸入了一些東西......
uj5u.com熱心網友回復:
這是您的代碼的更正版本:
from typing import List
class Solution:
def mergeSort(self, nums: List[int], left: int, right: int) -> List[int]:
if (left == right):
return [nums[left]]
answer = []
mid = left (right - left)//2
leftArr = self.mergeSort(nums, left, mid)
rightArr = self.mergeSort(nums, mid 1, right)
pointer1, pointer2 = 0 ,0
while ((pointer1 < len(leftArr)) and (pointer2 < len(rightArr))):
if (self.hashmap[leftArr[pointer1]] < self.hashmap[rightArr[pointer2]]):
answer.append(leftArr[pointer1])
pointer1 = 1
elif (self.hashmap[leftArr[pointer1]] > self.hashmap[rightArr[pointer2]]):
answer.append(rightArr[pointer2])
pointer2 = 1
else: # freq is equal
if (leftArr[pointer1] >= rightArr[pointer2]):
answer.append(leftArr[pointer1])
pointer1 = 1
else:
answer.append(rightArr[pointer2])
pointer2 = 1
while (pointer1 < len(leftArr)):
answer.append(leftArr[pointer1])
pointer1 = 1
while (pointer2 < len(rightArr)):
answer.append(rightArr[pointer2])
pointer2 = 1
return answer
def frequencySort(self, nums: List[int]) -> List[int]:
"""
step1: build a hashmap, key is the numbers in array, value is the freqency (N)
step2:
1. sort it first by the assending order of frequency and desending order
"""
hashmap = dict()
left, right = 0, len(nums)-1
for i in range(0, len(nums)):
if (nums[i] not in hashmap.keys()):
hashmap[nums[i]] = 1
else :
hashmap[nums[i]] = 1
self.hashmap = hashmap
return self.mergeSort(nums, left, right)
您當前的實作存在一些問題:
- 超出的時間限制是由于您沒有注意頻率相等且數量也相等的情況。這事兒常常發生。如果您有 2 個三分球,則兩者的頻率都是 2,并且它們的總排序也相同。這是發生此錯誤的地方:
elif (self.hashmap[leftArr[pointer1]] == self.hashmap[rightArr[pointer2]]):
if (leftArr[pointer1] > rightArr[pointer2]):
answer.append(leftArr[pointer1])
pointer1 = 1
elif (leftArr[pointer1] < rightArr[pointer2]):
answer.append(rightArr[pointer2])
pointer2 = 1
由于這兩種情況都沒有命中,因此不會增加指標,因此您會陷入while回圈。
- 頻率的比較不符合問題描述。較低的頻率首先出現,而您的代碼將較高的頻率放在前面。
- 在合并中添加左側或右側部分的潛在剩余元素的部分也不正確。查看我為他們制定的條件并與您的解決方案進行比較。
- 您可以通過比較代碼找到其他一些小錯誤。
注意:我已嘗試對您的代碼進行最少的編輯。它可以更干凈地實作,IMO,但由于這是一個學習程序,我認為這種方法會更有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411538.html
標籤:
上一篇:如何計算矩形第四個角的位置?
