排序算法------练习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);
    }
}
相关推荐
Zane199415 小时前
单例线程安全、生产者消费者、死锁:并发面试三连问串讲
java·后端
云烟成雨TD16 小时前
Micrometer 系列【42】链路追踪:Span 体系 | 核心 API
java·链路追踪·micrometer
Gorway16 小时前
理解 Spring 依赖注入:从构造器注入到集合与条件 Bean
java·后端
LiLiYuan.16 小时前
【字符串常量池】
java·开发语言·面试
Sylvia33.16 小时前
从轮询到推送:足球数据API架构演进与火星数据技术拆解
java·服务器·网络·python·websocket·架构
cfm_291416 小时前
高并发系统缓存全解
java·缓存
Ghost Face...16 小时前
龙芯Docker全流程:安装到离线迁移实战
java·docker·eureka
16月6日-晴16 小时前
Java面向对象进阶—static
java·开发语言
致Great17 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起17 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt