zoukankan      html  css  js  c++  java
  • 【Leetcode】排序相关

    【Leetcode-215】

    一、题目:数组中的第k大元素

      在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

    二、代码:

    def findKthLargest(self, nums: List[int], k: int) -> int:
            def quick_sort(arr, l, r, k):
                # if l >= r:
                #     return
                item = arr[l]
                i, j = l, r
                while i < j:
                    while arr[j] <= item and i < j:
                        j -= 1
                    if i < j:
                        arr[i], arr[j] = arr[j], arr[i]
                    while arr[i] >= item and i < j:
                        i += 1
                    if i < j:
                        arr[i], arr[j] = arr[j], arr[i]
                if i == k-1:
                    return arr[i]
                elif i < k-1:
                    return quick_sort(arr, i+1, r, k)
                else:
                    return quick_sort(arr, l, i-1, k)
                
            n =  len(nums)
            res = quick_sort(nums, 0, n - 1, k)
            return res

    【Leetcode-347】

    一、题目:第k个高频元素

      给定一个非空的整数数组,返回其中出现频率前 高的元素。

    二、代码:

    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
            """
            方法1:利用最小堆
            方法2:利用快排思想
            
            from collections import Counter
            count = Counter(nums)
            heap = []
            for num, cnt in count.items():
                if len(heap) < k:
                    heapq.heappush(heap, (cnt, num))
                else:
                    top = heap[0]  # 堆中最少的次数
                    if top[0] < cnt:
                        heapq.heapreplace(heap, (cnt, num))
            res = [t[1] for t in heap]
            return res
            """
            def quick_sort(arr, l, r, k):
                # if l >= r:
                #     return
                item = arr[l][1]
                i, j = l, r
                while i < j:
                    while arr[j][1] <= item and i < j:
                        j -= 1
                    if i < j:
                        arr[i], arr[j] = arr[j], arr[i]
                    while arr[i][1] >= item and i < j:
                        i += 1
                    if i < j:
                        arr[i], arr[j] = arr[j], arr[i]
                if i == k-1:
                    return arr[:k]
                elif i < k-1:
                    return quick_sort(arr, i+1, r, k)
                else:
                    return quick_sort(arr, l, i-1, k)
    
            from collections import Counter
            count = list(Counter(nums).items())
            n = len(count)
            res = quick_sort(count, 0, n - 1, k)
            return [t[0] for t in res]
    博文转载请注明出处。
  • 相关阅读:
    class7-附
    class6-附
    class6
    class5-附
    class4-附
    class4
    class3-附【家庭资产配置】
    class2
    芒果绿的blog
    java网络爬虫基础学习(四)
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/14608649.html
Copyright © 2011-2022 走看看