クラスソリューション{ 公共 のint findKthLargest(INT [] NUMS、int型K){ int型のlen = nums.length; INT左= 0、lenの右1 =。; int型のターゲットがlen = kは、大きな要素の//配列をk個添字がlenの-K、の法則求めることにより得ることができる しばらく(trueに){ int型のインデックス= パーティション(NUMS、左、右)、いくつかのサイズのアレイ内の最初の行の[左] NUMSを判定するための//インデックス対応する位置に移動 IF(インデックス== ターゲット) を返すNUMS [ターゲット]; IF(インデックス>ターゲット)// NUMS [左]右=インデックス1次決意し続けるように、それは、小さいよりも左からk番目の最大数、NUMS [左]よりも大きいからである。 右 = -index 1。; IF(インデックス< ターゲット) 左 =インデックス+ 1 ; } } パブリック int型のパーティション(INTは [] NUMSは、intです左、int型右){ int型のピボット= ; NUMS [左] INT J = 左; J //決定するために使用されるピボット行いくつかのサイズのアレイの最初の位置 のための(INT I =左+ 1;私は=右<; I ++は){ IF(NUMS [I] < ピボット){ J ++ 。 スワップ(NUMS、J、I); } } スワップ(NUMS、J、左)。 リターンJ。 } プライベート ボイドスワップ(INT [] NUMS、int型 index1の、int型INDEX2){ 場合(index1の== INDEX2)のリターン; INTの TEMP = NUMS [index1の]。 NUMS [インデックス1] = NUMS [INDEX2]。 NUMS [INDEX2] = TEMP。 } }