未ソート配列のk番目の最大の要素を検索します。あなたが見つける必要があることに注意してくださいすることは、アレイ内の最大の要素がソートされる最初のkはなく、k個の異なる要素です。
例1:
入力:[3,2,1,5,6,4]及びk = 2
出力:5
例2:
入力:[3,2,3,1,2,4,5,5,6]及びk 4 =
出力:4
概要:
あなたは、kが常にアクティブであると仮定し、1つの≤K≤配列の長さもよいです。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/kth-largest-element-in-an-array
クラス解決{ パブリック: ボイド quickSelect(ベクトル< INT >と、int型の L、int型の R、int型のランク){ INT iはLを=、J = R、ミッド= [(L + R)/ 2 ]。 実行{ 一方([I] <MID)++ I。 一方 - ([J]> MID); J もし(I <= J){ スワップ([I]、[J])。 ++ 私は、 - J; } } ながら(I <= J) もし(L <= J &&ランク<= J-L + 1 )quickSelect(L、J、ランク)。 もし(I <= R &&ランク> = I-L + 1)quickSelect(I、R、rank-(I- L))。 } INT findKthLargest(ベクトル< INT >&NUMS、int型K){ int型 N = nums.size()。 nums.push_back(0 )。 用(INT I = N; I> 0 ; i-- ){ NUMS [I] = NUMS [I- 1 ]。 } K = N-K + 1 。 // 戻り値のK; quickSelect(NUMS、1 、n、k)は、 戻りNUMS [K]。 } }。