从n个数中选出第k大的数——简单随机选择

BFPTR算法(中位数的中位数算法)求n个数中第k大的数 BFPTR算法求n个数中第k大(即第n-1-k小)的数,其思想是基于快速排序中对Partion的pivot值进行优化,快速排序中每一趟快排的pivot的选取一般是数组的首项或者尾项(数值比较随机),而BFPTR是每次选择5分中位数的中位数作为pivot进行下一趟快速排序的,这样做可以使算法的时间复杂度由最坏的O(n^2)变为O(n). 实现代码如下: #include using names 阅读详情
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <iomanip>
using namespace std;
int a[1000005];
int t=0;
long long int quicksort(long long int left,long long int right,int a[])
{
    int x=a[left];
    long long int l=left,r=right;
    while(l<r)
    {
        while(l<r&&x<a[r])r--;
        a[l]=a[r];
        while(l<r&&x>a[l])l++;
        a[r]=a[l];
    }
    a[l]=x;
    return l;
}
long long int solve(long long int l,long long int r,int a[],long long int k)
{
    if(l==r)
        return l;
    long long int pos=quicksort(l,r,a);
    long long int m=pos-l+1;
    if(m==k)
    {
        return pos;
    }
    if(m<k)
        return solve(pos+1,r,a,k-m);
    else
        return solve(l,pos-1,a,k);
}
int main()
{
    long long int n;
    long long int k;
    cin>>n>>k;
    for(long long int i=0; i<n; i++)
    {
        cin>>a[i];
    }
    long long int ans=solve(0,n-1,a,k);
    cout<<a[ans]<<endl;
    return 0;
}

 

选择问题(一组N个数确定其中的第K个最大者) 1、该问题的一种解法是讲这N个数读进一个数组中,在通过某种简单排序算法(如:冒泡排序),以递减的 顺序将数组排序,然后返回位置k上的元素。(c语言编写,输入输出c++,纯c的话改过来即可) #include #include #define SIZE 10 using namespace std; int *BubbleSort(const int A[], int N 阅读详情

相关推荐

蓄水池抽样算法 从n个数中随机取m个数(JAVA实现)

实际问题 从n个数据中随机取得m个数,n>m 算法大概思路 源数据的数组为a[] 大小为n “水池”即存放取出的数据的数组为b[] 大小为m 若要做到随机 则每个数据被选中的概率则为m/n 进行如下操作 ①对数组a[]进行遍历,设置j为遍历时当前元素下标,将a[]数组的前m个数据依次存入数组b[]中,此操作a[]数组中的前m个数被加入b[]数组的概率为100...

qq_41800087的博客 2431

在N个数中查找第K大的数字(Top K问题)

在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。 注意:题中只需得到最大的K个数,而不需要对后面N-K个数排序 可能存在的条件限制: 要求 时间 和 空间消耗最小、海量数据、待排序的数据可能是...

Carey_Lu的博客 2万+

求N个数中第K大的数

基于快排的查找来得到N个数中第K大的数,时间复杂度为O(KlogN)

选择问题——N个数中选择第K个最大数

决定开始好好学习,重拾JAVA,从头开始学数据结构和算法~ 如有不合适或者错误的地方欢迎各位大佬指出~~~

zz384dian的博客 1156

xilinx zynq-7000 linux下rs422串口通信测试步骤

这几天使用xilinx的zynq-7000系列调试rs422串口,期间遇到不少问题,好在最终调试完成,在这里记录一下调试步骤。 我用的soc型号是xc7z100,板载了2个rs422外设,PS端有2个uart控制器,uart0用于连接rs232并作为console控制台输出,uart1连接rs422。 rs422和主板连线原理图如下: 其中422_TXD1_3V3 和422_RXD1_3V3 为数据发送和接收引脚,422_TXD_DE1_3V3为发送使能引脚,422_RXD_REn1_...

dongyunke的博客 5907

【YOLOv8实战】从零构建番茄成熟度智能检测GUI系统【附完整工程】

本文详细介绍了从零构建基于YOLOv8的番茄成熟度智能检测GUI系统的完整实战流程。内容涵盖环境搭建、数据集准备、模型训练调优,并重点讲解如何使用PyQt5开发图形界面,最终将项目打包为可执行文件,实现AI模型从训练到桌面应用落地的完整工程闭环。

xxx12的博客 821

【编程】典型题目:寻找数组第K大数(四种方法对比)

【编程】典型题目:寻找数组第K大数(四种方法对比)

Danger的博客 1789

Jupyter地铁数据分析预测地铁后7天小时客流量

地铁数据分析 基于八月地铁刷卡数据,以前23天的数据作为训练数据,预测后7天各个地铁站点在6点—23点每个小时的客流量。 import pandas as pd import time import numpy as np import matplotlib.pyplot as plt ...

qq_45868915的博客 1753

面试题:从n个数中找出第K大的数

参考https://blog.youkuaiyun.com/orangefly0214/article/details/84997668的思路 从有n个元素的乱序数组中找出第k大的元素 方法1:基于冒泡排序和简单选择排序,时间复杂度o(n*k) 我们知道,在冒泡排序和简单选择排序中,最外层的循环每遍历一次,都可以把第i大(或第i小)的数排到数组的最前面,所以我们用这种方法,最外面经过k次遍历之后,就可以...

orangefly0214的博客 5万+

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

某AI推荐系统项目管理复盘:架构师总结的6大方法论与调优策略

我是张三,某大厂资深AI架构师,主导过5个千万级用户的推荐系统项目(覆盖电商、内容、视频、音乐、外卖等场景)。我的公众号“AI架构师笔记”会分享更多AI项目管理和技术实战经验,欢迎关注。最后的话:推荐系统不是“一锤子买卖”,而是“持续优化的过程”。希望这篇文章能帮你少踩坑,多做对——毕竟,把复杂的事做成,才是架构师的核心能力。

2501_92132293的博客 362

「leetcode」216.组合总和【回溯算法】详解!

别看本篇选的是组合总和III,而不是组合总和,本题和上一篇回溯算法:求组合问题相比难度刚刚好!

代码随想录 938

Linux内核配置选项详解及编译过程

在内核编译完成后,可以通过重启系统并选择新编译的内核来使用它。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。可以选择需要的网络协议和功能,并根据需要启用或禁用相应的选项。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。

TechGlide的博客 746

查找N个数中第K大的数

如题,这个问题好像见过很多次了。印象对它很深刻。只是一直没有自己想出好办法。 今天做题目,仔细想了,有下面几个思路: 1. 直接排序,然后再遍历,这是最自然的方法,当然也是最笨的,时间效果不好; 2.开辟一个K大小的空间,存储了后排序,然后把其他身下的一个个对比,这样也可以得到第k大的数,效果好一点,不够如果k=N那么就退化了,而且增加了内存开销; 3.后来想到,K的大小问题,于是有快速排

ljiangbig2的专栏 1572

【OpenCV】第二十三章: 图像特征检测之SURF、FAST、BRIEF、OBR算法

4、由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,如果对每个像素点都进行上述的检测过程,那显然是种浪费,所以FAST采用一种进行非特征点判别的方法:首先对候选点的周围90度的点(1,9,5,13)四个点进行测试,而且是先测试1和9,如果它们两个符合阈值要求再测试5和13。继SIFT和SURF后,大家在特征点检测的速度上又进行了很多的改进尝试,但速度的提升效果都不是非常明显,直到FAST算法诞生,特征点检测的速度才有了一个质的飞跃。无法计算描述符的特征点将被删除。

因为热爱所以坚持 2158

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 761

top-K问题和随机选择算法

之前聊过top-K问题,有朋友反馈说,如果内存能容纳下这N个元素,那么使用堆处理top-K问题,并不是最佳算法。确实如此,在本文中,我们来循序渐进地看下top-K问题的处理思路:1.快速排序算法;2.直接选择算法;3.堆选择算法;4.随机选择算法。

认知 行动 坚持 2818

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

选择问题——N个数中取第K个最大

一、简单排序             思路:将N个数从大到小排序,取第K个数          1.冒泡排序                void BubbleSort(int *arr, int arrLen) { int change = 0; for(int i = 0; i < arrLen-1; i++) { change = 0; for(int j = 0

spch2008的专栏 5236

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从N个数总随机选出M个数

来自编程珠玑 问题:假设一组数0,1,2,3,.....N-1,随机选出M个不重复的数字 开始0 被选择的概率为  M/N 1被选择的概率为  M/N(如果0没有被选择的话)  或者 M-1/N(0被选择了) 当到i 的时候被选择的概率为 剩余的数用r表示,要选择出的数用s,则其概率为 s/r 开始的时候 r=N s=M if(rand()%r概率为s/r    当rand(

surpassgood123的专栏 1553

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从n个数中选出k个数

从n个数中选出k个数 #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> a; vector<int> b; void fun(int a) { cout << a << " "; ...

你听我说,在这个地方你这样做,才是对的。 2762

寻找数组中第K大的数,时间复杂度O(N)

给定一个数组A,要求找到数组A中第K大的数字。对于这个问题,解决方案有不少,此处我只给出三种: 方法1:   对数组A进行排序,然后遍历一遍就可以找到第K大的数字。该方法的时间复杂度为O(N*logN) 方法2:   利用简单选择排序法的思想,每次通过比较选出最大的数字来,比较上K次就能找出第K大的数字来。该方法的时间复杂度为O(N*K),最坏情况下为O(N^2)。 方法3:     这种方法是本文谈论的重点,可以利用快排的思想,首先快排每次执行都能确定一个元素的最终的位置,如果这个位置是n-k

salmonwilliam的博客 1万+

GDAL在C#里处理遥感影像,从读取TIFF到获取坐标的完整代码示例与避坑点

本文详细介绍了如何在C#中使用GDAL库处理GeoTIFF格式的遥感影像,包括环境配置、文件读取、元数据提取和坐标转换等关键操作。通过完整的代码示例和避坑指南,帮助开发者高效实现遥感影像处理,特别强调了内存管理、坐标系统处理和性能优化等关键技术点。

weixin_30580341的博客 519

找出N个元素的数组中最大的K个数

题目: 给出 N 个整数(N可能很大,以致无法装入内存),找出前 K 个最大的整数 【解法一】 如果 N 的数量不是很大,例如在几千个左右,则在这种情况下,那我们就先排序一下,这里快速排序或者推排序都是很好的解决方案,平均时间复杂度为 O(N * log2N)。然后取出前 K 个,O(K)。 总共时间复杂度 O(N * log2N)+ O(K) = O(N * log2N)。 当 K =

shuiziliu1025的博客 7348

从n个数中选择随机选择m个, m个数互不重复

/////////*从n个数中选择随机选择m个, m个数互不重复******************////////////////// int g_seed = 0;   void srand_quick(int seed) {     g_seed = seed; }   inline int rand_quick() {     return ( ((g_s

wangxugangzy05的专栏 3703

N个数中寻找前K个最大的数

child++;先赞后看,养成习惯!!!码字不易,大家的支持就是我坚持下去的动力。关注我哦!如有错误请您指正批评!

2301_79811170的博客 478

随机N个数,并返回第k小的数

在前一篇的基础上,随即返回N个数。 返回第k小数,须将N个数进行排序。 方法有两种 第一,将N个数排序,返回a[k-1]; 第二,将前k个数排序,剩下的数逐个与a[k-1]比较,如果小于a[k],则调到正确位置,如果大于则忽略。 我采用的是第一种方法,以后在后续文章里加入第二种方法以及可能更好的方法 #include&lt;iostream&gt; #include&lt;cstdl...

LY_In_Mind的博客 445
上一篇: 1040 有几个PAT (25 分)
下一篇: OpenMP在VS2017上测试无法实现多线程问题的解决
Yolo_Fs
博客等级 码龄9年 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值