zoukankan      html  css  js  c++  java
  • Sword 40

    https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/

    应用快排中的 partition 函数,

    如果返回值比 K 大就在前半段寻找第 K 大的值,

    如果返回值比 K 小就在后半段寻找第 K-num 大的值(num 是pos 的相对位置),

    若等于 K,结果就是 arr 中的前 K 个元素。

    再说 partition 函数

    以arr[left]的值来分割 arr, 先将 a[left]存在 pivot 中,创建两个指针 low, high分别指向头尾

    先找到第一个小于pivot 的 arr[high], 覆盖 arr[low],

    再找到第一个大于 pivot 的 arr[low], 覆盖 arr[high],

    这样数组两端就有符合题意了,中间化成了一个规模更小的,和原问题同性质的数组,

    一直迭代到 i >= j即可.

    本题是qsort 的困难版,因为要考虑第 K 个排名。

  • 相关阅读:
    2019年CSP-J初赛试题(普及组)试题详解
    开放课件
    猴子选大王 (约瑟夫问题)
    后缀表达式转中缀表达式
    JDBC的使用
    JDBC
    MySQL第五天
    MySQL第四天
    MySQL第三天
    MySQL第二天
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/14463971.html
Copyright © 2011-2022 走看看