544. Top k Largest Numbers【medium】
Given an integer array, find the top k largest numbers in it.
Given [3,10,1000,-99,4,100] and k = 3.
Return [1000, 100, 10].
解法一:
class Solution {
public:
/*
* @param nums: an integer array
* @param k: An integer
* @return: the top k largest numbers in array
*/
vector<int> topk(vector<int> nums, int k) {
std::priority_queue<int> heap;
for(int i = ; i < nums.size(); i++) {
heap.push(nums[i]);
}
std::vector<int> result;
for (int i = ; i < k; i++) {
result.push_back(heap.top());
heap.pop();
}
return result;
}
};
优先队列,类似于维护一个大小为k的最大堆/最小堆(STL中的priority_queue默认是最大堆),时间复杂度为O(n * logk)
解法二:
class Solution {
/*
* @param nums an integer array
* @param k an integer
* @return the top k largest numbers in array
*/
public int[] topk(int[] nums, int k) {
int[] temp = new int[k];
if(nums == null || nums.length == 0) {
return temp;
}
quickSort(nums, 0, nums.length - 1, k);
if(nums.length < k) {
return nums;
}
for(int i = 0; i < k; i++) {
temp[i] = nums[i];
}
return temp;
}
public void quickSort(int[] nums, int start, int end, int k) {
if (start >= end) {
return;
}
int left = start, right = end;
int mid = left + (right - left) / 2;
int pivot = nums[mid];
while(left <= right) {
while(left <= right && nums[left] > pivot) {
left++;
}
while(left <= right && nums[right] < pivot) {
right--;
}
if(left <= right) {
swap(nums, left, right);
left++;
right--;
}
}
quickSort(nums, start, right, k);
quickSort(nums, left, end, k);
}
private void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
};
快速排序,取出前k大的数,时间复杂度O(n*logn + k)
544. Top k Largest Numbers【medium】的更多相关文章
- 2. Add Two Numbers【medium】
2. Add Two Numbers[medium] You are given two non-empty linked lists representing two non-negative in ...
- Top k Largest Numbers
Given an integer array, find the top k largest numbers in it. Example Given [3,10,1000,-99,4,100] an ...
- 92. Reverse Linked List II【Medium】
92. Reverse Linked List II[Medium] Reverse a linked list from position m to n. Do it in-place and in ...
- 82. Remove Duplicates from Sorted List II【Medium】
82. Remove Duplicates from Sorted List II[Medium] Given a sorted linked list, delete all nodes that ...
- 74. First Bad Version 【medium】
74. First Bad Version [medium] The code base version is an integer start from 1 to n. One day, someo ...
- 75. Find Peak Element 【medium】
75. Find Peak Element [medium] There is an integer array which has the following features: The numbe ...
- 61. Search for a Range【medium】
61. Search for a Range[medium] Given a sorted array of n integers, find the starting and ending posi ...
- 62. Search in Rotated Sorted Array【medium】
62. Search in Rotated Sorted Array[medium] Suppose a sorted array is rotated at some pivot unknown t ...
- 159. Find Minimum in Rotated Sorted Array 【medium】
159. Find Minimum in Rotated Sorted Array [medium] Suppose a sorted array is rotated at some pivot u ...
随机推荐
- seajs实例
点击文本改变: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- laravel的 array 函数
代码如下: routes.php文件 // 获⃣取⃣数⃣组⃣的⃣第⃣一⃣个⃣ Route::get('/helper', function () { $arr = [1, 2, 4]; return ...
- 同步和异步 阻塞和非阻塞 IO多路复用和select总结
同步和异步的概念 同步是指用户线程发起IO请求后,需要等待或者轮询内核IO操作完成后才能继续执行: 异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程或者调用用户线程注册的回 ...
- Android应用程序访问linux驱动第一步:实现并测试Linux驱动
一直都想亲自做一次使用android应用程序访问Linux内核驱动的尝试,但总是没能做到.最近抽出时间,下决心重新尝试一次.尝试的开始当然是先写一个Linux内核驱动了. 我希望写一个简单测驱动程序, ...
- Spark Streaming no receivers彻底思考
数据接入Spark Streaming的二种方式:Receiver和no receivers方式 建议企业级采用no receivers方式开发Spark Streaming应用程序,好处: 1.更优 ...
- Oracle数据迁移至HBase操作记录
Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...
- 转:ios的图片文件上传代码
转自: https://gist.github.com/igaiga/1354221 @interface ImageUploader : NSObject { NSData *theImage; } ...
- Unity 博客精选(持续更新)
Unity开源贡献 http://blogs.unity3d.com/2014/09/16/getting-started-as-a-contributor-to-our-open-source-pr ...
- 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)
线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...
- 3dmax做的模型导入U3d后 当模型靠近摄像机时镂空问题
使用3dMax Reset XForm下就好了. 原因可能是 法线方向问题?