布尔值的解释-在未排序的数组中查找第K个最大元素

时间:2019-11-21 15:29:54

标签: python algorithm

我试图解决标题中提到的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] <2)时,输出为... True。因此,wy while循环是一个无限循环。

我想我不知道Python中有一个微妙之处,这使我失败了。

1 个答案:

答案 0 :(得分:1)

这与布尔值无关。

对于某些功能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元素的顺序,因此,当您第二次调用它们时,它们的顺序不同,并且该函数将计算不同的输出。