当前位置: 首页 > news >正文

第k小整数(快排)

题目描述

“哇,好多冰淇淋啊!”张琪曼跑到学院的冷饮店,伸出2根手指对冰淇淋老板说,“来3个。”老板蒙了,问:“几个?”张琪曼又伸出3根手指说“2个。”
老板满头大汗:“我不管你要几个,只要你能从你的口袋里的魔法石里找出第k小的魔法石,冰淇淋随便你吃。”
现在你知道该怎么做了吧?那就是:对于给定的n个元素的无序数组,要求从中找出第k小的元素。

输入

第一行是总数n(1<n<100000)和k,第二行是n个待比较元素。

输出

第k小的数在数组中的位置。

样例输入
5 3
25 9 90 57 3
样例输出
1

(时间复杂度小于2n)

区间[L,R]

1.找到分界点x(三种选择q[L],q[R],q[(L+R)/2])

2.左边所有数Left\leqslantx

   右边所有数Right\geqslantx

3.递归排序Left,递归排序Right

k\leqslant s_L(s_L为左区间长度),递归Left

k>s_L,递归Right(k-s_L

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,q[100005],pos[100005];
int quick_sort(int l,int r,int k){if(l==r)return q[l];int x=q[l],i=l-1,j=r+1;while(i<j){while(q[++i]<x);while(q[--j]>x);if(i<j)swap(q[i],q[j]);}int sl=j-l+1;if(k<=sl)return quick_sort(l,j,k);return quick_sort(j+1,r,k-sl);
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=0;i<n;i++){cin>>q[i];if(pos[q[i]]==0)pos[q[i]]=i+1;}int d=quick_sort(0,n-1,k);cout<<pos[d];return 0;
}

http://www.lryc.cn/news/607571.html

相关文章:

  • 如何理解卷积,和自注意力机制的局限与优势(个人理解)
  • 倒计时!2025国自然放榜时间锁定
  • 使用Nginx部署前端项目
  • 【Linux】磁盘存储+文件系统简介
  • 开箱即用的Next.js SSR企业级开发模板
  • Java Ai 数组:day(09)
  • 【Nginx反向代理】通过Nginx反向代理将多个后端server统一到同一个端口上的方法
  • 算法题——数组
  • Implement recovery based on PITR using dump file and binlog
  • Deep Height Decoupling for Precise Vision-based 3D Occupancy Prediction
  • 【JAVA面试】基础篇
  • 代码随想录算法训练营三十三天|动态规划part06
  • GenieWizard: Multimodal App Feature Discovery with LargeLanguage Models
  • 直播平台中的美白滤镜实现:美颜SDK的核心架构与性能优化指南
  • Java 22 新特性解析与代码示例
  • Corrosion2靶机攻略
  • three.js实现随机山脉波纹效果
  • 【LeetCode刷题指南】--单值二叉树,相同的树
  • RustFS:高性能文件存储与部署解决方案(MinIO替代方案)
  • session和cookie作用详解
  • Solana:解决Anchor Build编译程序报错 no method named `source_file` found for struct
  • 设计模式1:创建型模式
  • 后台管理系统权限管理:前端实现详解
  • PDFsam免费开源!PDF分割合并工具
  • unity学习——视觉小说开发(一)
  • AI应用UX设计:让技术更懂用户
  • Android Jetpack 系列(五)Room 本地数据库实战详解
  • 第一个大语言模型的微调
  • Transformer架构全解析:搭建AI的“神经网络大厦“
  • Spring之【循环引用】