LintCode——第K大元素

第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置)

样例:

数组 [9,3,2,4,8],第三大的元素是 4

数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3

解题思路:

快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分

数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

利用快速排序思想找到第K大元素。

1、Java:

 1 class Solution {
 2     /*
 3      * @param k : description of k
 4      * @param nums : array of nums
 5      * @return: description of return
 6      */
 7     public int kthLargestElement(int k, int[] nums) {
 8         // write your code here
 9         return quickSort(nums,0,nums.length-1,k);
10     }
11     public int quickSort(int[] nums,int left,int right,int k){
12         int i = left;
13         int j = right;
14         int tmp = nums[i];
15         while(i<j){
16             while(i<j && tmp>=nums[j]) j--;
17             if(i<j){
18                 nums[i]=nums[j];
19                 i++;
20             }
21             while(i<j && tmp<nums[i]) i++;
22             if(i<j){
23                 nums[j]=nums[i];
24                 j--;
25             }
26         }
27         if(i == k -1){
28             return tmp;
29         }else if(i< k-1){
30             return quickSort(nums,i+1,right,k);
31         }else{
32             return quickSort(nums,left,i-1,k);
33         }
34     }
35 };

2、Python:

 1 class Solution:
 2     # @param k & A a integer and an array
 3     # @return ans a integer
 4     def kthLargestElement(self, k, A):
 5         return self.quickSort(A,0,len(A)-1,k)
 6         
 7     def quickSort(self,nums,left,right,k):
 8         i = left
 9         j = right
10         tmp = nums[i]
11         while i<j:
12             while i<j and tmp>=nums[j]:
13                 j -= 1
14             if i<j:
15                 nums[i] = nums[j]
16                 i += 1
17             while i<j and tmp< nums[i]:
18                 i += 1
19             if i<j:
20                 nums[j] = nums[i]
21                 j -= 1
22         if i == k-1:
23             return tmp
24         elif i< k-1:
25             return self.quickSort(nums,i+1,right,k)
26         else:
27             return self.quickSort(nums,left,i-1,k)

猜你喜欢

转载自www.cnblogs.com/wangcj2015/p/9096054.html