第k大元素

來源:互聯網
上載者:User

標籤:

題目描述:在數組中找到第k大的元素

範例:給出數組 [9,3,2,4,8],第三大的元素是 4;給出數組 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此類推

和上一道中位元的題(詳見:點擊開啟連結)是一模一樣的,需要注意的是,數組既然要按升序排列,那麼第k大元素就是數組的倒數第k位,也就是索引為n - k的元素,還是按照快排的思想,通過一個分割函數找到每次樞軸應該排在的位置,比較這個位置和n - k的前後,如果恰好是n - k,直接返回;如果小於n - k,則說明需要在樞軸所在後面的數組中找尋;如果大於n - k,則說明需要在樞軸所在前面的數組中找尋。這個思路如果還有疑問,請移步我剛才給的連結。

那麼代碼幾乎跟“中位元”的題是一樣的,如下:

class Solution:    # @param k & A a integer and an array    # @return ans a integer    def kthLargestElement(self, k, A):        n = len(A)        if n == 0:            return None        begin, end = 0, n - 1        index = self.partition(A, 0, n - 1)        while index != n - k:            if index > n - k:                end = index - 1                index = self.partition(A, begin, end)            else:                begin = index + 1                index = self.partition(A, begin, end)                        return A[index]                        def partition(self, A, begin, end):        if begin >= end:            return begin        pivot = A[begin]        index = begin        for i in range(begin + 1, end + 1):            if A[i] <= pivot:                index += 1                A[i], A[index] = A[index], A[i]        A[begin], A[index] = A[index], A[begin]        return index
這兩道題,包括前面排列顏色的問題,都是快排的應用,所以,有時候學習演算法,確實需要理解它背後的原理,而不僅僅是會寫出這一個問題的代碼。

第k大元素

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.