排序算法------练习1

1. 题目

2. 思路和题解

这道题其实就是用昨天总结的常用排序算法里的快速排序。因为每次经过划分操作之后,一定是可以确定出一个元素的最终位置,因此我们不需要全部排序完成,只需要某次划分的 q q q为倒数第 k k k个下标的时候,就已经确定了答案。

java 复制代码
class Solution {
    int quickselect(int[] nums, int left, int right, int k) {
        if (left == right) {
            return nums[k];
        }
        int x = nums[left], i = left - 1, j = right + 1;
        while (i < j) {
            do i++; while (nums[i] < x);
            do j--; while (nums[j] > x);
            if (i < j){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
            }
        }
        if (k <= j) return quickselect(nums, left, j, k);
        else return quickselect(nums, j + 1, right, k);
    }
    public int findKthLargest(int[] _nums, int k) {
        int n = _nums.length;
        return quickselect(_nums, 0, n - 1, n - k);
    }
}
相关推荐
塔能物联运维3 小时前
塔能两相液冷:600W/cm²极限能力,为下一代AI芯片预留充足散热余量
人工智能·算法·两相液冷
醉城夜风~4 小时前
手撕 C++ string:从零实现一个简易字符串类
开发语言·c++·算法
手写码匠4 小时前
华为云Flexus+DeepSeek征文|DeepSeek+RAG知识库实战:基于Flexus X实例与Dify构建企业级智能问答系统
人工智能·深度学习·算法·aigc
用户91366296220124 小时前
ViewModelScope 简介与使用
java
上海安当技术4 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
Zane19944 小时前
Lock 接口与 AQS 核心原理:手写理解一把可重入锁是怎么运作的
java·后端
Full Stack Developme4 小时前
SpringBoot 整合 Druid 并列出参数清单
java·spring boot·后端
caishenzhibiao4 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
zander2585 小时前
LeetCode 46. 全排列
算法·leetcode·深度优先
我命由我123455 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio