question:
解法:求这种最大最小的数或者数组,一般都会先将他们进行排序,这里我还是采用快排,之后会更新其他排序方法
程序1:运行时出现了超时,因为时间复杂度已经达到了两次方,很高的时间复杂度系统不能通过
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def findTopKth(left, right):
indx = random.randint(left, right)
nums[left], nums[indx] = nums[indx], nums[left]
base = nums[left]
i = left
j = right
# 时间复杂度较高,暂时不知道怎么去改变,大家可以给点建议
**while i<j:
while i<j and base >= nums[j]:
j -= 1
nums[i] = nums[j]
while i<j and base >= nums[i]:
i -= 1
nums[j] = nums[i]
nums[left], nums[i] = nums[i], nums[left]**
if i == k - 1:
return nums[i]
elif i > k - 1:
return findTopKth(left, i - 1)
else:
return findTopKth(i + 1, right)
return findTopKth(0, len(nums) - 1)
程序2:时间复杂度还是很高
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
a=self.fast_sort(nums, 0, len(nums)-1, k)
return nums[len(nums)-k]
def fast_sort(self,nums,first,last,k):
if first>=last:
return
low=first
high=last
temp=nums[first]
while low<high:
#从后往前找,找到一个就交换
while nums[high]>=temp and low<high:
high-=1
nums[low]=nums[high]
#从前往后找,找到一个就交换
while nums[low]<temp and low<high:
low+=1
nums[high]=nums[low]
#将参考值放到中间,此时low=high
nums[low]=temp
#递归遍历标准值右边子序列
self.fast_sort(nums, low+1, last, k)
#递归遍历标准值左边子序列
self.fast_sort(nums, first, low, k)
return nums
这道题和之前做的可能不太一样,要求复杂度低优先,之后再更新一下这道题的其他做法,欢迎大家积极评论