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]
    博文转载请注明出处。
  • 相关阅读:
    memcache内存估算整理
    yii2-更改默认显示的通用主页
    微信小程序开发工具中快捷键
    微信个人公众号推广
    [微信小程序]编译.wxss出错,2 not found
    [转载]SSH框架搭建详细图文教程
    网址收集
    在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
    css与html基础收集
    js与jq基础记录
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/14608649.html
Copyright © 2011-2022 走看看