第k小的数(二分、partition)
题目
要求以最快效率求出一个乱序数组中的第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)相关推荐
- 在数组中找到第 k 小的数
在数组中找到第 k 小的数 [要求] 如果 arr 长度为 N,要求时间复杂度为 O(N),额外空间复杂度为 O(1). public static int[] getMinKNumByHeap(in ...
- (寻找第K小的数amp;amp;寻找第K小的数的和)
这一篇博客以一些OJ上的题目为载体,讲一下寻找第K小的数的方法 方法一: 先将数据排列好,然后,然后return a[k]或者将前K个数加起来 方法二: 基于高速排序.如,一次高速排序将某一个数放到了 ...
- 7-1 找第k小的数(反思),a++和++a的区别,运算符优先级,递归分制思想
作者 陈晓梅 单位 广东外语外贸大学 设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示 函数int partition(int a[],i ...
- 在两个已经排好序的数组里找出第K小的数
前言: 这道题是一道非常常见的面试题,也是一道能够考察一个人的编程能力和算法的一道题.如果要求复杂度为 O(k), 是比较容易做出来的,但是,一般来讲,面试官要求给出更低复杂度的算法.网上有很多不同的 ...
- 第K小的数BFPRT算法
介绍 BFPRT是解决求一个数组中第K小的数的算法,可以时间O(N)的时间复杂度,而使用排序求第K小的数的算法的时间复杂度为O(NlogN),因此BFPRT算法更加高效 思想 (1)分组:将原数组每五 ...
- 7-1 找第k小的数 (20 分)
设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示:函数int partition(int a[],int left,int right)的 ...
- 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; 我 ...
- 两个有序数组合起来求第k小的数+左老师专访ACM大神(笔记)8月5日斗鱼直播实录
1.长度相等的两个有序数组寻找上中位数 注:上中位数1 2 3 4 5 6为3(偶数两个中位数为前面那个) 思路:去掉不可能为上中位数的,剩下的简化组合求上中位数. 1.1 奇数序列 位置 位置 位置 ...
- LeetCode 719. 找出第 K 小的数对距离
719. 找出第 K 小的数对距离 [二分+二分] 首先对数组排序,然后算出最大值和最小值之间的差值,这个差值就是解空间的最大值,然后对解空间进行二分,每次对解空间的mid统计数对距离小于他的个数,通 ...
最新文章
- paramiko使用1
- 神经网络与机器学习 笔记—反向传播算法(BP)
- 7系统启动到一半停止_太突然!国际饮料巨头计划狂砍一半品牌,这些饮料就快喝不到了…...
- [Qt教程] 第14篇 2D绘图(四)绘制路径
- 动态开点线段树(多棵线段树)的内存分配与回收
- python使用异常的目的和好处_python 错误与异常,python assert的作用
- wpf中显示HTML
- 折纸机器人的步骤图解_折纸图解公牛
- Python实现多重弹窗脚本 整蛊朋友
- bootstrap-toastr 消息通知插
- 如何使用Xposed+JustTrustMe来突破SSL Pinning
- 《VERSE Versatile Graph Embeddings from Similarity Measures》阅读笔记
- Densepose安装教程--依据Github官方教程成功安装
- 2020高考数学:常用知识点公式第四章(文科)
- Kubernetes(K8s)Events介绍(上)
- 使用word进行图片的有序命名
- 美国的ACH支付体系
- 富士康将和台积电联手 竞购东芝半导体业务
- 跨平台开发解决方案浅谈
- 高清壁纸免费下载网站