Python递归帮助器方法不返回任何值,而不返回int

问题描述

我想编写代码以便可以使用快速排序找到第k个最大数字,并在LeetCode中编写以下内容,LeetCode将首先调用findKthLargest

class Solution(object):
    def partition(self,arr,left,right):
        piv = arr[right]
        i = left-1
        counter = left
        while (counter<right):
            if (arr[counter]<piv):
               i = i+1
               tmp = arr[counter] 
               arr[counter]=arr[i]
               arr[i]=tmp
            counter = counter+1
        temp = arr[i+1]
        arr[i+1]=arr[right]
        print('pivot '+str(piv)+' at '+str(i+1))
        arr[right]=temp
        print("at the nmoment "+str(arr))
        return (i+1)
    def helper(self,right,k):
        if (left>=right):
            return 
        p = self.partition(arr,right)
        print("p is now "+str(p))
        if (p==len(arr)-k):
  
            return int(arr[p])
        self.helper(arr,p-1,k)
        self.helper(arr,p+1,k)
    def findKthLargest(self,nums,k):
        f= self.helper(nums,len(nums)-1,k)
        print(f)

我什至在辅助方法内打印(arr [p]),它给了我正确的答案,但是在方法findKthLargest内,变量f显示为none类型,我想知道哪里出了问题?目前,我认为它返回的是null类型,因为在检查辅助方法内部的(left> = right)是否不返回时,在递归循环内部

解决方法

问题是您的helper函数并不总是返回值。仅在if条件为true的基本情况下,它会返回一个数字值。但是它也应该在进行相应的递归调用时返回相同的数字。

所以改变:

self.helper(arr,left,p-1,k)
self.helper(arr,p+1,right,k)

收件人:

result = self.helper(arr,k)
if result is not None:
    return result
return self.helper(arr,k)

这样,最深的返回值将使递归树冒泡,并且在第一次递归调用中成功执行将避免进行第二次递归调用。

,

很难调试您的代码,尽管使用较少的语句即可通过:

class Solution:
    def findKthLargest(self,nums,k):
        def kth_smallest(nums,k):
            if nums:
                pos = partition(nums,len(nums) - 1)
                if k > pos + 1:
                    return kth_smallest(nums[pos + 1:],k - pos - 1)
                elif k < pos + 1:
                    return kth_smallest(nums[:pos],k)
                else:
                    return nums[pos]

        def partition(nums,right):
            res = left
            while left < right:
                if nums[left] < nums[right]:
                    nums[left],nums[res] = nums[res],nums[left]
                    res += 1
                left += 1
            nums[res],nums[right] = nums[right],nums[res]
            return res

        return kth_smallest(nums,len(nums) + 1 - k)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...