O(n)求中位数和第k大数
解题关键:模板与思路。面试题
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
//两种方式求on中位数
int partition(int L[],int l,int r){
int i,num=l;
for(i=l+;i<=r;i++){
if(L[i]<L[l]){
swap(L[i],L[++num]);
}
}
swap(L[l],L[num]);
return num;
}
void getmid(int L[],int l,int r){
int mid=(l+r)/;
while(){
int pos=partition(L,l,r);
if(pos==mid) break;
else if(pos>mid) r=pos-;
else l=pos+;
}
printf("%d\n",L[mid]);
}
//得到第k大
int getMinK(int v[], int l, int r, int k){
if(l<r){
int i=l,j=l;
for(;j<r;j++){
if(v[j]<v[r]){
swap(v[i++],v[j]);
}
}
swap(v[i],v[r]);
if(k==i) return v[i];
else if(k<i) return getMinK(v,l,i-,k);
else return getMinK(v,i+,r,k);
}
else return v[l];
} int main(){
int a[]={,,,,,};
getmid(a,,);
//int ans=getMinK(a,0,4,2);
//printf("%d\n",ans);
return ;
}
O(n)求中位数和第k大数的更多相关文章
- 10G整数文件中寻找中位数或者第K大数
来源:http://hxraid.iteye.com/blog/649831 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就 ...
- 求第区间第k大数 TLE归并树
题 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. 第二行包含N个正整数,表示这个序列各项的数字. 接下来M ...
- 线性时间求取第 K 大数
求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 \(O(nlogK)\).借助于分治思想,以及快速排序的区间划分,我们可以做到 \(O(n)\) 时间复杂度.具体算法 ...
- [csu/coj 1080]划分树求区间前k大数和
题意:从某个区间内最多选择k个数,使得和最大 思路:首先题目给定的数有负数,如果区间前k大出现负数,那么负数不选和更大,于是对于所有最优选择,负数不会出现,所以用0取代负数,问题便转化为区间的前k大数 ...
- [nowCoder] 两个不等长数组求第K大数
给定两个有序数组arr1和arr2,在给定一个整数k,返回两个数组的所有数中第K小的数.例如:arr1 = {1,2,3,4,5};arr2 = {3,4,5};K = 1;因为1为所有数中最小的,所 ...
- 求两个有序数组的中位数或者第k小元素
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...
- 堆实战(动态数据流求top k大元素,动态数据流求中位数)
动态数据集合中求top k大元素 第1大,第2大 ...第k大 k是这群体里最小的 所以要建立个小顶堆 只需要维护一个大小为k的小顶堆 即可 当来的元素(newCome)> 堆顶元素(small ...
- 求第K大数(分治)
题意:已知N个数,求第K大数. 分析: 1.复杂度O(n). 2.利用快排中划分的原理,每次划分以序列中第一个数x为标准,将序列划分为{比x大的数}x{比x小的数}. 3.若集合{比x大的数}中元素为 ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 求第K大数 Selection
问题 给定N个元素的数组,求第k大的数. 特例当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用顺序统计求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小 ...
随机推荐
- Asp.net Mvc 过滤器执行顺序
Asp.net Mvc 过滤器执行顺序: IAuthorizationFilter(OnAuthorization)----->IActionFilter(OnActionExecuting)- ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(下)
转载:http://www.jianshu.com/p/b73b6953e849 该资源的github地址:Qix <Statistical foundations of machine lea ...
- DP 过河卒
棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标 ...
- Java中的强制类型转换
例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...
- java里面的public static void main(String[] args)
package com.java_1; public class Hello { public static void main(String[] args){ System.out.println( ...
- 同步机制之--java之CountDownLatch闭锁
CountDownLatch闭锁 1.类介绍 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数初始化 CountDownLatch.CountDown ...
- linux 下查找文件或者内容常用命令
转自:http://www.cnblogs.com/sunleecn/archive/2011/11/01/2232210.html whereis <程序名称>查找软件的安装路径-b 只 ...
- 遇到版本兼容问题时 Newtonsoft.Json
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <depen ...
- 关于No ManagedConnections available within configured blocking timeout异常的解决
最近由于系统和业务重构需要,需要把线上1亿数据迁移到新库,由于业务变更,新表老表结构有变化,没法直接用dba dump的方式,需要自己写转换程序迁移.今天在调试的时候,碰到一个蛋疼的问题,就是一开始查 ...
- 仿知乎日报App
1.6.Error:Execution failed for task ':app:buildInfoDebugLoader'.> Exception while doing past iter ...