快排 + 二分

2023-11-19

一直觉得快排跟二分很像,大家也都有很多变种,在此整理一下
快排的特点是,需要一个pivort,让左边比他大,右边比他小(反之亦然),每次排序都有一个数的位置被确定
两种写法其实是一种

经典partition写在一个函数里

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        def quicksort(start,end):
            idx = random.randint(start,end)
            nums[start], nums[idx] = nums[idx], nums[start]
            l,r = start,end
            while l < r:
                while l < r and nums[r] <= nums[start]:
                    r -= 1
                while l < r and nums[l] >= nums[start]:
                    l += 1
                nums[l],nums[r] = nums[r], nums[l]
            nums[l],nums[start] = nums[start] , nums[l]
            if l == k - 1:
                return nums[l]
            elif l < k - 1:
                return quicksort(l + 1, end)
            else:
                return quicksort(start, l - 1)
        return quicksort(0,len(nums) -1)
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        l, r = 0 ,len(nums) - 1
        def partition(l,r):
            pivot = random.randint(l,r)
            nums[pivot] , nums[l] = nums[l],nums[pivot]
            s,e = l ,r
            while s < e:
                while s < e and nums[e] <= nums[l]:
                    e -= 1
                while s < e and nums[s] >= nums[l]:
                    s += 1
                nums[s], nums[e] = nums[e], nums[s]
            nums[s], nums[l] = nums[l], nums[s]
            return s
        while True:
            idx = partition(l,r)
            if idx == k - 1:
                return nums[idx]
            elif idx < k - 1:
                l = idx + 1
            else:
                r = idx - 1

全部排列代码如下

def findk3(nums):
    def quicksort(start,end):
        if start >= end:
            return
        idx = random.randint(start,end)
        nums[start], nums[idx] = nums[idx], nums[start]
        l,r = start,end
        while l < r:
            while l < r and nums[r] <= nums[start]:
                r -= 1
            while l < r and nums[l] >= nums[start]:
                l += 1
            nums[l],nums[r] = nums[r], nums[l]
        nums[l],nums[start] = nums[start] , nums[l]
        quicksort(l + 1, end)
        quicksort(start, l - 1)

    return quicksort(0,len(nums) -1)
findk3(nums)
print(nums)

全部排序代码如下

def findk4(nums):
    def quicksort(l,r):
        if l > r:
            return
        idx = partition(l,r)
        quicksort(idx + 1,r)
        quicksort(l,idx - 1)
    def partition(l,r):
        pivot = random.randint(l,r)
        nums[pivot] , nums[l] = nums[l],nums[pivot]
        s,e = l ,r
        while s < e:
            while s < e and nums[e] <= nums[l]:
                e -= 1
            while s < e and nums[s] >= nums[l]:
                s += 1
            nums[s], nums[e] = nums[e], nums[s]
        nums[s], nums[l] = nums[l], nums[s]
        return s
    return quicksort(0,len(nums) - 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快排 + 二分 的相关文章

  • 更改seaborn.clustermap中ytick标签的颜色

    是否可以更改seaborn clustermap中ytick标签的颜色 所以对于Seaborn 鸢尾花示例 http seaborn pydata org generated seaborn clustermap html 可以根据物种设置
  • 如何从网站中抓取动态内容?

    所以我使用 scrapy 从亚马逊图书部分抓取数据 但不知何故我知道它有一些动态数据 我想知道如何从网站中提取动态数据 到目前为止我已经尝试过以下方法 import scrapy from items import AmazonsItem
  • 二进制数据的Python字符串表示

    我试图理解 Python 显示表示二进制数据的字符串的方式 这是一个使用的示例乌兰多姆操作系统 http docs python org library os html os urandom In 1 random bytes os ura
  • 使用记事本打开文本文件作为python中的帮助文件?

    我想为我的简单程序的用户提供打开帮助文件的机会 以指导他们如何充分利用我的程序 理想情况下 我希望在 GUI 上有一个蓝色的小帮助链接 可以随时单击该链接 从而在本机文本编辑器 例如记事本 中打开 txt 文件 有没有一种简单的方法可以做到
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • 用定点迭代求解该方程

    我怎样才能解这个方程 x3 x 1 0 使用定点迭代 有没有定点迭代我可以在网上找到代码 尤其是Python 吗 Using scipy optimize fixed point http docs scipy org doc scipy
  • 可以memmap pandas系列。数据框怎么样?

    看来我可以通过创建 mmap d ndarray 并使用它来初始化系列来对 python 系列的底层数据进行内存映射 def assert readonly iloc try iloc 0 999 Should be non editabl
  • 使用正则表达式检查整个字符串

    我正在尝试检查字符串是否是数字 因此正则表达式 d 似乎不错 然而 由于某种原因 该正则表达式也适合 78 46 92 168 8000 这是我不想要的 一些代码 class Foo rex re compile d def bar sel
  • argparse 更改参数的定义

    我按如下方式设置参数解析器 parser argparse ArgumentParser parser add argument point help enter a point e g 2 3 4 parser parse args po
  • Emacs:在缓冲区求值期间将参数传递给下级 Python shell

    最近我开始使用 Emacs 作为 Python IDE 它不太直观 我现在遇到的问题是当使用 C c C c 评估缓冲区时如何将命令行参数传递给下级 python shell 感谢帮助 这似乎并不容易实现 管理的劣质流程python el模
  • 如何在 Python for 循环中获取 GAE ndb 中当前记录的密钥?

    我目前有一个网页 其中显示数据存储中的记录列表以及编辑链接 我想从数据库转换它 至新开发银行 我是 Python 和 GAE 新手 当前代码 tbody for listtype in listtypes tr td listtype Li
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • Tkinter 按钮鼠标右键和左键单击有不同的命令

    我正在用 Python 制作扫雷游戏 并使用 tkinter 库来创建 gui 有没有 绑定到 tkinter 按钮两个命令的方法 一个是右键单击按钮时的命令 另一个是单击左键时的命令 通常 按钮仅设计用于单击 但 tkinter 允许您为
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • Pandas 使用什么规则来生成视图和副本?

    我对 Pandas 在决定数据帧中的选择是原始数据帧的副本或原始数据帧的视图时使用的规则感到困惑 例如 如果我有 df pd DataFrame np random randn 8 8 columns list ABCDEFGH index
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 在 python 中使用 re.sub 将字母变成大写?

    在许多编程语言中 以下内容 find foo a z bar并替换为GOO U 1GAR 将导致整个匹配项变为大写 我似乎无法在 python 中找到等效项 它存在吗 您可以将函数传递给re sub http docs python org
  • Spark (Python) 中的 Kolmogorov Smirnov 测试不起作用?

    我正在 Python Spark ml 中进行正态性测试 看到了我的结果think是一个错误 这是设置 我有一个标准化的数据集 范围 1 到 1 当我做直方图时 我可以清楚地看到数据不正常 gt gt gt prices norm hist
  • 通过过滤对 Pyspark Dataframe 进行分组

    我有一个数据框如下 cust id req req met 1 r1 1 1 r2 0 1 r2 1 2 r1 1 3 r1 1 3 r2 1 4 r1 0 5 r1 1 5 r2 0 5 r1 1 我必须观察客户 看看他们有多少要求 看看
  • Pandas:如何删除以 nan 作为列名的多个列?

    根据标题 这是一个可重现的示例 raw data x this that this that this np nan np nan np nan np nan np nan np nan y np nan np nan np nan np

随机推荐

  • html怎样设置同意服务条款,用户使用协议及服务条款.html

    用户使用协议及服务条款 axure utils getTransparentGifPath function return resources images transparent gif axure utils getOtherPath
  • 智慧煤矿技术理论篇1-5G与WiFi6技术

    5G VS WiFi6 5G技术 第五代移动通信技术 英语 5th generation mobile networks或5th generation wireless systems 5th Generation 简称5G或5G技术 是最
  • 数据结构-栈和队列(C/C++)

    栈和队列 一 实验目的 熟练掌握栈以及队列的结构特点 二 实验内容 运用栈和队列的结构特点完成相应的基本操作和实例 三 实验步骤 过程以及运行程序截图 栈 问题1 栈的基本操作 在插入栈元素的时候做一个统一输入 达到一次性任意输入0 Sta
  • 【每日一练】79—CSS实现扫描二维码动画

    二维码的应用越来越普通 加个好友 付个款 做个核酸 想去一个地方 还要扫个场所码 总之 需要二维码的地方越来越多 因此 在这样的大环境里 如何让你的码与众不同 引人注意 就显得非常重要 今天我们就来练习一个二维码的动画效果 具体效果如下 看
  • html5自带属性验证表单必填

    html5自带属性验证表单必填 2014年02月25日 Html5 共 366字 字号 小 中 大 6条评论 阅读 6 515 次 为了防止恶意注册 通常会验证表单必填 实现方法以js为主 略微麻烦 今天才发现 html5如今已自带验证表单
  • 注册表常用键值意义

    HKEY CURRENT USER Software Policies Microsoft Internet Explorer Control Panel Internet Explorer选项类 HomePage dword 000000
  • IDEA下java程序的简单调试

    一 本次任务实现的是一个java的程序调试 首先本次进行调试的一个程序是实现从1累加到100的功能 是在IDEA下进行编写的 如图所示 将其运行之后得到的结果如图所示 把第12行的输出语句给取消掉注释之后再运行一次得到的结果如图所示 这里由
  • day15

    文章目录 一 平衡二叉树 二 回溯小难 二叉树的所有路径 三 左叶子之和 一 平衡二叉树 110 平衡二叉树 依旧是使用后序遍历来统计高度 递归过程中 发现某节点的左右子树的高度差超过了1 我们就直接返回 1 不返回节点的高度了 递归函数的
  • CentOS安装Docker详细步骤

    一 简介 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 然后发布到任何流行的 Linux 或 Windows 操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何
  • ubuntu下搭建elasticsearch集群

    在Ubuntu 18 04 1 LTS搭建一个简单的elasticsearch集群demo 具体情况如下 集群名称 elasticsearch cluster demo 主节点 1个 node master one 数据节点 2个 node
  • 【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现

    前言 在开发一款无线射频产品的时候 软件是一部分 硬件也是一部分 而决定无线收发性能的 首先是硬件的匹配电路 然后才到软件部分的优化 一款无线射频产品 首先需要先决定是在那个频率范围内 当然是国家允许的范围内 然后硬件则需要在基于这个频点范
  • 逻辑综合——工艺库

    一 库文件的设置 运行DC时需要用到的库文件有 目标库 target library 链接库 link library 符号库 symbol library 算术运算库 synthetic library 1 目标库 目标库是综合后电路网表
  • xml转义字符

    在mybatis在编写sql时不能在XML里直接使用 lt 或者是 gt 在这里需要使用转义字符替换 下面列举常用的xml转义对应 1 lt lt 小于号 2 gt gt 大于号 3 amp 和 4 apos 单引号 5 quot 双引号
  • 【前端知识点总结】Vue(一) 脚手架 及 ESlint

    Vue 前端攻城狮必备技能 1 什么是 Vue 渐进式 javacript 框架 渐进式 按需添加功能 逐渐集成 框架 拥有自己的语法规则 例 Vue 项目对其依赖很高 业务开发中如果选择了框架最好不要轻易更换框架 否则需要重构的地方很多
  • 软件版本详细对比alpha,beta,Gamma,RC,RT

    开源软件发布的时候 经常有alpha beta RC1 RC2 RC3等等 看得云里雾里 不知道啥意思 做了个简单总结 缩写 全称 中文意思 详细说明 功能与bug alpha 内测 开发团队内部测试的版本或者有限用户体验测试版本 功能不全
  • SylixOS IDE工具使用

    1 问题描述 使用RealEvo IDE 以下简称IDE 开发程序时 误操作输入错误的函数名称时 编译器不会报错 输入错误的函数名示例代码如程序清单1 1所示 程序清单 1 1 示例代码 include
  • 软件自动化测试对软件产品起到什么作用?有什么注意事项?

    自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程 通常 在设计了测试用例并通过评审之后 由测试人员根据测试用例中描述的规程一步步执行测试 得到实际结果与期望结果的比较 一 软件自动化测试的作用 1 提高测试效率 自动化测试可以大幅
  • 小记MAC安装GIT

    MAC安装GIT教程 0 安装方式说明 MAC安装软件的时候 有一个很好用的工具 叫 homebrew 大家可以试一下 我这里采用下载安装包的方式进行 1 下载git 我这里就暂且选择git最新版本 2 36 1 正常情况下 我们一般不选择
  • 经典的笔试题解析《高质量C/C++编程》

    对于 高质量C C 编程 想必这个已经是早已成名的经典书籍了 在此 笔者借用两三个题目 解析下面代码 错误示列 请勿模仿 正确的代码 在后面部分 include
  • 快排 + 二分

    一直觉得快排跟二分很像 大家也都有很多变种 在此整理一下 快排的特点是 需要一个pivort 让左边比他大 右边比他小 反之亦然 每次排序都有一个数的位置被确定 两种写法其实是一种 经典partition写在一个函数里 class Solu