leetcode--Kth Largest Element in an Array

本文介绍了一种通过快速选择算法找到未排序数组中第K大的元素的方法。此算法基于快速排序的思想,通过不断地分区来缩小搜索范围,最终定位到目标元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

Note: 
You may assume k is always valid, 1 ≤ k ≤ array's length.

[java]  view plain  copy
  1. public class Solution {  
  2.     public int findKthLargest(int[] nums, int k) {  
  3.         if(k>nums.length) return 0;  
  4.         int mid = partion(nums, 0, nums.length-1);  
  5.         while(mid!=k-1){  
  6.             if(mid>k-1){  
  7.                 mid = partion(nums, 0, mid-1);  
  8.             }else{  
  9.                 mid = partion(nums, mid+1, nums.length-1);  
  10.             }  
  11.         }  
  12.         return nums[mid];  
  13.     }  
  14.           
  15.     int partion(int[] nums,int start,int end){  
  16.         int t = nums[start];  
  17.         while(start<end){  
  18.             while(start<end&&nums[end]<=t){  
  19.                 end--;  
  20.             }  
  21.             nums[start] = nums[end];  
  22.             while(start<end&&nums[start]>=t){  
  23.                 start++;  
  24.             }  
  25.             nums[end] = nums[start];  
  26.         }  
  27.         nums[start] = t;  
  28.         return start;  
  29.     }  
  30. }  

原文链接http://blog.youkuaiyun.com/crazy__chen/article/details/46581419

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值