我试图解决标题中提到的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中有一个微妙之处,这使我失败了。
答案 0 :(得分:1)
这与布尔值无关。
对于某些功能f(nums) == 2
,f(nums) < 2
可能为真,然后f
随后为真,而这并不是矛盾,也不表示存在根本缺陷。语言。原因很简单,f(nums)
可以返回2,然后再次调用f(nums)
可以返回1。这不应该让人感到惊讶2 == 2
和1 < 2
都是正确的。
您的函数确实是这样的:
>>> nums = [4, 3, 1]
>>> findrealposition(0, nums)
(2, [3, 1, 4])
>>> findrealposition(0, nums)
(1, [1, 3, 4])
此函数每次都提供不同的输出,因为您为其提供了不同的输入。 findrealposition
函数更改nums
元素的顺序,因此,当您第二次调用它们时,它们的顺序不同,并且该函数将计算不同的输出。