LeetCode题库215:数组中的第K个最大元素(Java解题)
题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
交换排序算法求解
解题思路
经过 k 轮的交换排序,使得数组的前 k 个数以降序排列,那么第 k 个数就是数组中第 k 大的数了。
第一轮,nums[0] 分别和 nums[1] ~ nums[n] 的所有数依次比较,谁 battle 赢了,谁就占据首位,且胜者和负者要交换位置。经过第一轮,第一名已经决出,之后 nums[0] 不需要再参与后续的比较。
第二轮,nums[1] 分别和 nums[2] ~ nums[n] 的所有数争夺第二的位置,以此类推。
第 k 轮, nums[k - 1] 分别和 nums[k] ~ nums[n] 的所有数争夺第 k 位。
算法结束,得到结果值。
代码实现
public class Util {
public static void main(String[] args) {
int[] test = new int[]{3,2,3,1,2,4,5,5,6};
System.out.println(findKthLargest(test, 4));
}
public static int findKthLargest(int[] numbers, int k) {
for (int i = 0; i < numbers.length && i < k; i++) {
for (int p = i + 1; p < numbers.length; p++) {
if (numbers[p] > numbers[i]) {
int temp = numbers[i];
numbers[i] = numbers[p];
numbers[p] = temp;
}
}
}
return numbers[k - 1];
}
}