《leetCode》:Kth Largest Element in an Array
来源:互联网 发布:军工大数据龙头股票 编辑:程序博客网 时间:2024/06/07 00:02
题目
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.
思路一:利用排序
看到这个题目,一般想到的方法就是将数组进行排序,然后找出第k大的元素即可。但是,时间复杂度为O(n*logn)
int cmp(const void* a,const void* b){ return (*((int *)a))-(*((int *)b));}int findKthLargest(int* nums, int numsSize, int k) { if(nums==NULL||numsSize<1||k<0||k>numsSize){ return 0; } qsort(nums,numsSize,sizeof(nums[0]),cmp); return nums[numsSize-k];}
思路二:不完全排序
思路一是全部将数组进行了排序然后选择出结果。其实,我们可以选择不完全排序来解决问题,在快排中,将数组分成两半,前面一半数组中的数全部小于 主元的值,后面一半数组中的数全部大于主元的值,如果主元的索引index
void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}int partition(int* nums, int start,int end){ if(end<start){ return -1; } int val=nums[start]; int index=start; for(int i=start+1;i<=end;i++){ if(nums[i]<val){ index++; swap(&nums[index],&nums[i]); } } swap(&nums[start],&nums[index]); return index;}void sortHelper(int* nums, int start,int end,int numsSize,int k){ if(end<=start){ return; } int index=partition(nums,start,end); if(index==numsSize-k){ return; } else if(index<numsSize-k){ sortHelper(nums,index+1,end,numsSize,k); } else if(index>numsSize-k){ sortHelper(nums,start,index-1,numsSize,k); }}int findKthLargest(int* nums, int numsSize, int k) { if(nums==NULL||numsSize<1||k<0||k>numsSize){ return 0; } int start=0; int end=numsSize-1; sortHelper(nums,start,end,numsSize,k); return nums[numsSize-k];}
通过上面的理论分析,理论上第二种方法的运行时间会比第一种的运行时间少,出于好奇的看了下这两种方法的运行时间,如下:
第一种方法的运行时间:
第二种方法的运行时间:
从两张图中可以看出,居然是第一种的还要快。比较郁闷,居然和理论结果不一样。
郁闷的同时也开始找原因,开始以为是因为函数调用开销太大,导致第二种方法的运行时间过慢,因此,就把swap(int *a,int *b) 的功能全部用三行代码在函数partition中实现。居然,根本没有改善。呜呜。
1 0
- Leetcode Kth Largest Element in an Array
- Leetcode: Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- [LeetCode] Kth Largest Element in an Array
- [leetcode] Kth Largest Element in an Array
- leetcode--Kth Largest Element in an Array
- #leetcode#Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- 【Leetcode】Kth Largest Element in an Array
- Leetcode: Kth Largest Element in an Array
- Kth Largest Element in an Array -- leetcode
- [Leetcode]Kth Largest Element in an Array
- [LeetCode]Kth Largest Element in an Array
- *LeetCode-Kth Largest Element in an Array
- LeetCode----Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- leetcode-Kth Largest Element in an Array
- LeetCode -- Kth Largest Element in an Array
- 认识 EXT2 文件系统、磁盘分区 ( Partition )、文件系统:
- mysql索引
- leetcode 58. Length of Last Word
- 更新到Xcode 7.3 #import 不提示的问题
- MFC+OpenCV打开图像
- 《leetCode》:Kth Largest Element in an Array
- iOS开发学习之 - 深入学习UIButton(2)
- Java-Eclipse编辑窗口不见了
- 2546 饭卡(01背包,挺好的)
- 嵌入式linux常用shell指令
- Androdi AsyncTask
- Whu oj 1609 - Han Move
- 函数指针
- Linux下硬链接和软链接