我试图解决标题中提到的Leetcode问题(我不是在寻求最佳答案,而是在寻找一种现象的解释)。

这是我的算法:

def findKthLargest(nums, k) :
    def findrealposition(index,nums):
        ind = index
        index1 = index + 1
        while index1 < len(nums) :
            if nums[ind] < nums[index1] :

                index1 += 1
            else :
                nums[ind], nums[index1] = nums[index1], nums[ind]
                ind += 1
                index1 += 1

        return ind, nums
    index = 0
    while findrealposition(index,nums)[0] != len(nums)-k :

        if findrealposition(index,nums)[0] < len(nums)-k :
            print('less')
            index, nums = 0, findrealposition(index,nums)[1]
        else :
            print('more')
            index, nums = findrealposition(index,nums)
    return nums[len(nums)-k]


问题如下:以[4,3,1]作为列表,以1作为位置运行算法,输入0的“ findrealposition”函数(因此位置为4的列表排序)给出2作为输出(列表作为第二位置)。这是好事。但是当我打印(findrealposition(0,nums)[0]
我想我不知道Python中有一个微妙之处,这使我失败了。

最佳答案

这与布尔值无关。

对于某些功能f(nums) == 2f(nums) < 2可能为真,然后f立即为真,而这并不矛盾,也不表示该语言存在根本缺陷。原因很简单,f(nums)可以返回2,然后再次调用f(nums)可以返回1。这不应该让人感到惊讶,2 == 21 < 2都是真实的。

您的函数确实是这样运行的:

>>> nums = [4, 3, 1]
>>> findrealposition(0, nums)
(2, [3, 1, 4])
>>> findrealposition(0, nums)
(1, [1, 3, 4])


每次您提供不同的输入,此函数都会提供不同的输出。 findrealposition函数更改nums元素的顺序,因此当您第二次调用它时,它们的顺序不同,并且该函数将计算不同的输出。

关于python - bool 值的解释-在未排序的数组中找到第K个最大元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58978406/

10-14 14:04