Given an integer array, find the top k largest numbers in it.

 
Example

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)

最新文章

  1. css学习笔记(1)
  2. maven权威指南学习笔记(四)&mdash;&mdash; maven生命周期(lifecycle)
  3. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
  4. [ACM_模拟] ZOJ 3713 [In 7-bit 特殊输出规则 7bits 16进制]
  5. ADB 在 Android SDK 的中的路径
  6. PSYoungGen /PSOldGen/PSPermGen区别
  7. IOS基础 Day-1手动内存管理
  8. spring集合类型的setter注入的一个简单例子
  9. PADSPOWERPCB中怎样去隐藏一些PIN脚
  10. iOS: NSMutableArray的方法removeObject:inRange:
  11. Qt---自定义界面之 Style Sheet
  12. Xampp相关命令
  13. lumion室内渲染二6.3
  14. WordPress版微信小程序开发系列(二):安装使用问答
  15. ThinkPHP 3.1.2 CURD特性 -3
  16. Java 时间、字符串
  17. position:fixed ,锚点定位不准确的问题
  18. Python3基础 __getattr__ 访问不存在的属性时,新增提示功能
  19. MT【139】公比为有理数
  20. 【loj2639】[Tjoi2017]不勤劳的图书管理员

热门文章

  1. FIS常用功能之资源合并
  2. matlab中cell array的理解
  3. std::string 用法
  4. Julia:高性能 GPU 计算的编程语言
  5. 十三.spring-boot使用spring-boot-thymeleaf
  6. IP地址网段规划
  7. screen space shadowmap unity
  8. Python Matplotlib绘制气温图表
  9. svn: warning: xxxx is already under version control
  10. 修改PHP上传文件的大小限制