题目

要求以最快效率求出一个乱序数组中的第k小的数
例如:{1,6,7,2,3} 第k=3小的数为3

解法

如何找次序?利用partition分界左边是小数右边是大数,那么就能知道partition的次序,再利用二分查找原理,这里的k就相当于target,sequenceOfPivot就相当于mid

public class Solution {public static int result(int[] arr, int left, int right, int k) {while(left <= right) {//小数和大数分界点下标int indexOfPivot = Util.partition(arr,left,right);//分界点相应的次序int sequenceOfPivot =  indexOfPivot + 1;//分界点的值int pivot = arr[indexOfPivot];//要找次序k在分界点右边if(k > sequenceOfPivot) {left = indexOfPivot + 1;}//次序k在分界点左边 else if(k < sequenceOfPivot) {right = indexOfPivot - 1;}//次序k就在分界点处 else return pivot;}return -1;}
}
注意:
  • 使用该方法后,原数组的顺序会被打乱
  • 这里找的第k小的数实际上找的是原数组被打乱后的数组的第k小的数
  • 这个被打乱后的数组的中值次序恰好等于midIndex+1

第k小的数(二分、partition)相关推荐

  1. 在数组中找到第 k 小的数

    在数组中找到第 k 小的数 [要求] 如果 arr 长度为 N,要求时间复杂度为 O(N),额外空间复杂度为 O(1). public static int[] getMinKNumByHeap(in ...

  2. (寻找第K小的数amp;amp;寻找第K小的数的和)

    这一篇博客以一些OJ上的题目为载体,讲一下寻找第K小的数的方法 方法一: 先将数据排列好,然后,然后return a[k]或者将前K个数加起来 方法二: 基于高速排序.如,一次高速排序将某一个数放到了 ...

  3. 7-1 找第k小的数(反思),a++和++a的区别,运算符优先级,递归分制思想

    作者 陈晓梅 单位 广东外语外贸大学 设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示 函数int partition(int a[],i ...

  4. 在两个已经排好序的数组里找出第K小的数

    前言: 这道题是一道非常常见的面试题,也是一道能够考察一个人的编程能力和算法的一道题.如果要求复杂度为 O(k), 是比较容易做出来的,但是,一般来讲,面试官要求给出更低复杂度的算法.网上有很多不同的 ...

  5. 第K小的数BFPRT算法

    介绍 BFPRT是解决求一个数组中第K小的数的算法,可以时间O(N)的时间复杂度,而使用排序求第K小的数的算法的时间复杂度为O(NlogN),因此BFPRT算法更加高效 思想 (1)分组:将原数组每五 ...

  6. 7-1 找第k小的数 (20 分)

    设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示:函数int partition(int a[],int left,int right)的 ...

  7. O(logn)在两个有序数组找第k小的数

    我们有两个有序数组,A[1+n],B[1+n],下标从1开始. logn显然就是二分折半. 设la=1,ra=n,lb=1,rb=n; mida=(la+ra)/2,midb=(lb+rb)/2; 我 ...

  8. 两个有序数组合起来求第k小的数+左老师专访ACM大神(笔记)8月5日斗鱼直播实录

    1.长度相等的两个有序数组寻找上中位数 注:上中位数1 2 3 4 5 6为3(偶数两个中位数为前面那个) 思路:去掉不可能为上中位数的,剩下的简化组合求上中位数. 1.1 奇数序列 位置 位置 位置 ...

  9. LeetCode 719. 找出第 K 小的数对距离

    719. 找出第 K 小的数对距离 [二分+二分] 首先对数组排序,然后算出最大值和最小值之间的差值,这个差值就是解空间的最大值,然后对解空间进行二分,每次对解空间的mid统计数对距离小于他的个数,通 ...

最新文章

  1. paramiko使用1
  2. 神经网络与机器学习 笔记—反向传播算法(BP)
  3. 7系统启动到一半停止_太突然!国际饮料巨头计划狂砍一半品牌,这些饮料就快喝不到了…...
  4. [Qt教程] 第14篇 2D绘图(四)绘制路径
  5. 动态开点线段树(多棵线段树)的内存分配与回收
  6. python使用异常的目的和好处_python 错误与异常,python assert的作用
  7. wpf中显示HTML
  8. 折纸机器人的步骤图解_折纸图解公牛
  9. Python实现多重弹窗脚本 整蛊朋友
  10. bootstrap-toastr 消息通知插
  11. 如何使用Xposed+JustTrustMe来突破SSL Pinning
  12. 《VERSE Versatile Graph Embeddings from Similarity Measures》阅读笔记
  13. Densepose安装教程--依据Github官方教程成功安装
  14. 2020高考数学:常用知识点公式第四章(文科)
  15. Kubernetes(K8s)Events介绍(上)
  16. 使用word进行图片的有序命名
  17. 美国的ACH支付体系
  18. 富士康将和台积电联手 竞购东芝半导体业务
  19. 跨平台开发解决方案浅谈
  20. 高清壁纸免费下载网站

热门文章

  1. js动态加载HTML元素时出现的无效的点击事件
  2. 今天开始学习QT for sysbiam 1
  3. mysql如何开启对外连接?
  4. Android网络通信的六种方式
  5. SwiftUI AsyncImage cancelled 无法加载图片
  6. 信息系统项目管理08——项目质量管理
  7. 日常积累--javaweb
  8. [转]Linux下VSCode常用的快捷键
  9. 参与就有1000块,30W奖池你占一半 | 帆软开发者大赛招募
  10. centos可视化打开和修改文件(隐藏文件)