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



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

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

这与布尔值无关。

对于某些功能ff(nums) == 2很可能为真,然后f(nums) < 2紧接着为真,这不是悖论或表明语言中的根本缺陷。原因很简单,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 元素的顺序,因此当您第二次调用它时,它们的顺序不同,并且该函数计算不同的输出。

最新更新