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];
    }
}
posted @   极客子羽  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示