排序算法------练习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);
    }
}
相关推荐
浪扼飞舟11 小时前
C#(多线程和同步异步)
java·开发语言
hanqunfeng11 小时前
(三十三)Redisson 实战
java·spring boot·后端
2301_7806698611 小时前
字符集及其编码、解码操作、IO流分类
java·开发语言
计算机毕设指导611 小时前
基于微信小程序的运动场馆服务系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
冰暮流星11 小时前
javascript的switch语句介绍
java·前端·javascript
有梦想的攻城狮11 小时前
Java中的Double类型的存在精度丢失详解
java·开发语言·bigdecimal·double
囊中之锥.11 小时前
机器学习算法详解:DBSCAN 聚类原理、实现流程与优缺点分析
算法·机器学习·聚类
AlenTech11 小时前
152. 乘积最大子数组 - 力扣(LeetCode)
算法·leetcode·职场和发展
m0_7482495412 小时前
Java 语言提供了八种基本类型【文123】
java·开发语言·python
移幻漂流12 小时前
Kotlin 如何解决 Java 的核心痛点:现代语言特性的深度剖析
java·python·kotlin