215. Kth Largest Element in an A

2018-12-07  本文已影响0人  woniudear
  1. 冒泡排序
    两两比较,把最大的放在最后,然后次大的放倒数第二,依次执行。。。
class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        for i in range(len(nums)):
            for j in range(len(nums) - i - 1):
                if nums[j] > nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        return nums[len(nums) - k]

2.选择排序
从list中比较所有的选择最大的和最后一个元素交换,重复此动作。

class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        for i in range(k):
            temp = 0
            for j in range(len(nums)-i):
                if nums[j] > nums[temp]:
                    temp = j
            nums[temp], nums[len(nums)-i-1] = nums[len(nums)-i-1], nums[temp]
        return nums[len(nums)-k]
  1. 快速排序
    每次选最右边为pivot,小于pivot放在左侧,大于pivot的放在右侧,如果k在左边就继续排左边,要不然就不管左边,继续排右边。
class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        return self.findKthSmallest(nums, len(nums)+1-k)
    
    def findKthSmallest(self, nums, k):
        # if len(nums) == 1:
        #     return nums[0]
        
        pivot = self.partition(nums, 0, len(nums) - 1)
        
        if k > pivot + 1:
            return self.findKthSmallest(nums[pivot+1:], k-pivot-1)
        elif k < pivot + 1:
            return self.findKthSmallest(nums[:pivot], k)
        else:
            return nums[pivot]
    def partition(self, nums, l, r):
        pos = l
        while l < r:
            if nums[l] < nums[r]:
                nums[l], nums[pos] = nums[pos], nums[l]
                pos += 1
            l += 1
        nums[pos], nums[r] = nums[r], nums[pos]
        return pos
上一篇 下一篇

猜你喜欢

热点阅读