leetcode面试准备:Kth Largest Element in an Array
2015-09-11 15:13
561 查看
leetcode面试准备:Kth Largest Element in an Array
1 题目
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.
接口:
int findKthLargest(int[] nums, int k)
2 思路
找出数组中第k大的元素。分治的思想,利用partition的过程结果,第k的数,在排序后的len - k的位置。
3 代码
/** * 偷懒的做法 */ public int findKthLargest0(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k]; } /** * 分治的思想,利用partition的过程结果,第k的数,在排序后的len - k的位置。 */ public int findKthLargest(int[] nums, int k) { int len = nums.length; int goal = len - k; int left = 0, right = len - 1; int index = partition(nums, left, right); while (index != goal) { if (index < goal) { left = index + 1; } else { right = right - 1; } index = partition(nums, left, right); } return nums[goal]; } private int partition(int[] a, int p, int r) { int i = p - 1; int x = a[r]; for (int j = p; j < r; j++) { if (a[j] <= x) { i++; swap(a, i, j); } } swap(a, i + 1, r); return i + 1; } private void swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; }
4 总结
分治相关文章推荐
- 薪资谈判应该避免的7个错误-兄弟连IT教育
- 多线程面试题(迅雷)
- 多线程面试题(Google)
- git 在开发中程序员最基本最有用的几步
- 程序员技术
- 黑马程序员--反射
- 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址
- 最老程序员开发实训9--Android---应用介绍页面实现1
- 作为程序员你必须知道的几点
- 乐观的程序员
- 程序员的年龄天花板
- 程序员常去的14个顶级开发社区
- 30多年程序员生涯经验总结
- 程序员什么时候该考虑辞职
- 8个让程序员追悔莫及的职业建议
- 成为程序员前需要做的10件事
- 程序员修炼指南——引导你成为真正的编程高手
- 程序员的 13 种噩梦,你遇到过哪些?
- 程序员常去的14个顶级开发社区
- JavaWeb工程师面试(一)