美文网首页
找第k 大的数

找第k 大的数

作者: SHAN某人 | 来源:发表于2018-04-07 18:00 被阅读65次
题解:
  • 找第 K 大数,基于比较的排序的方法时间复杂度为 O(n),数组元素无区间限定,故无法使用线性排序。
  • 由于只是需要找第 K 大数,这种类型的题通常需要使用快排的思想解决。这里比较基准值最后的位置的索引值和 K 的大小关系即可递归求解。
# Find K-th largest element in an array.

# Example
# In array [9,3,2,4,8], the 3rd largest element is 4.

# In array [1,2,3,4,5], the 1st largest element is 5,
# 2nd largest element is 4, 3rd largest element is 3 and etc.

# Note
# You can swap elements in the array

# Challenge
# O(n) time, O(1) extra memory.

def partition(l, left, right):
    middle = left
    while(left < right):
        # 高指针先走
        while not l[right] <= l[middle] and left < right:
            right -= 1
        while not l[left] > l[middle] and left < right:
            left += 1
        l[left], l[right] = l[right], l[left]
    # 交换中轴元素
    l[middle], l[right] = l[right], l[middle]
    return left


def quickSort(l, left, right,k):
    if left >= right:
        return -1
    m = partition(l, left, right)
    print('ls {}  l {}  m {}  r {}'.format(l, l[left], l[m], l[right]))
    if k == m:
        return k
    if k > m :
        quickSort(l, m + 1, right,k)
    else :
        quickSort(l, left, m - 1,k)
    


def kThLargestItem(l,k):
    quickSort(l,0,len(l)-1,k)
    print(l[k])



l = [5, 4, 2, 1, 3, 9]
kThLargestItem(l,5)
# quickSort(l, 0, len(l) - 1)
# print(' return_list {}'.format(l))

问题:之前的算法没有考虑到边界条件,即数组中是否有重复数字
问题的解决: 在排序之前去重?

相关文章

  • Leetcode--Heap

    215. Kth Largest Element in an Array 要找第K大的数,就是找第len(nums...

  • 找第k 大的数

    题解: 找第 K 大数,基于比较的排序的方法时间复杂度为 O(n),数组元素无区间限定,故无法使用线性排序。 由于...

  • Leetcode.215.Kth Largest Element

    题目 给定一个数组, 输出第k大的数. 思路 进行从大到小排序, 第k-1即为第k大的数. 总结 掌握快速排序.

  • 数组中第K大的数

    一、相关概念 二、题目 题目 一个未排序的数组中找第k大的数 思路 快排 代码 参考文献 数组中的第K个最大元素

  • bfprt算法

    前言 在一个数组中求其第k大或者第k小的数的问题(其实就是找按降序或升序排好序的数组的下标为k-1的元素),简称T...

  • 无序数组找第K大的数

    1、使用HashMap或者Queue保存 如果是少量的数据,比如K=2,3等可以使用,如2,保存到HashMap找...

  • 算法每日一题 - 寻找第K小的数

    题目描述 给定一个整数数组num,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。...

  • LeetCode 215. Kth Largest Elemen

    @(LeetCode) 问题描述 找出数组中第 k 个最大的数。注意是数组排序后第 k 大的数,而不是去重后的第 ...

  • 数组

    第K大的数 第K大的数1.快排:每次返回的是标准的index,当index=k-1时就返回,不是就遍历一边2.堆排...

  • 每日一道算法题之-字符串、动态规划、数组

    第 k 大的数Find the kth largest element in an unsorted array....

网友评论

      本文标题:找第k 大的数

      本文链接:https://www.haomeiwen.com/subject/pdwyhftx.html