我试图解决标题中提到的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) == 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
元素的顺序,因此当您第二次调用它时,它们的顺序不同,并且该函数将计算不同的输出。关于python - bool 值的解释-在未排序的数组中找到第K个最大元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58978406/