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

分治算法求序列中第K小数

题目

P1138 第 k 小整数

算法标签: 分治, 快速选择算法, P a r t i t i o n Partition Partition算法

思路

每次选择一个基准元素, 进行考虑

H o a r e Hoare Hoare划分方法

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010, M = 30010;int n, k, w[N];
int cnt;
bool vis[M];int find(int l, int r) {if (l == r) return w[l];int mid = w[l + r >> 1];int i = l - 1, j = r + 1;while (i < j) {while (w[++i] < mid);while (w[--j] > mid);if (i < j) swap(w[i], w[j]);}if (k <= j) return find(l, j);return find(j + 1, r);
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> k;for (int i = 1; i <= n; ++i) {int val;cin >> val;if (!vis[val]) {w[++cnt] = val;vis[val] = true;}}if (cnt < k) {cout << "NO RESULT" << "\n";return 0;}int ans = find(1, cnt);cout << ans << "\n";return 0;
}

* L o m u t o Lomuto Lomuto划分方法

这个逻辑的边界问题处理非常麻烦

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010, M = 30010;int n, k, cnt;
int w[N];
bool vis[M];int find(int l, int r) {if (l == r && l == k) return w[l];if (l < k) {int val = w[l];int i = l, j = r;while (i < j) {while (i < j && w[j] > val) j--;if (i < j) swap(w[i], w[j]);while (i < j && w[i] <= val) i++;if (i < j) swap(w[i], w[j]);}w[i] = val;if (i == k) return w[k];else if (k < i) return find(l, i - 1);return find(i + 1, r);}
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> k;for (int i = 0; i < n; ++i) {int val;cin >> val;if (!vis[val]) {w[++cnt] = val;vis[val] = true;}}if (cnt < k) {cout << "NO RESULT" << "\n";return 0;}int ans = find(1, cnt);cout << ans << "\n";return 0;
}

相关文章:

  • Tomcat DOS漏洞复现(CVE-2025-31650)
  • 使用PyTorch进行热狗图像分类模型微调
  • C语言与Unix的传奇起源
  • k8s术语之Deployment
  • Android Studio下载安装教程
  • 【数据通信完全指南】从物理层到协议栈的深度解析
  • C#静态类与单例模式深度解析(七):从原理到工业级应用实践
  • PyQt5 到 PySide6 技术栈转换详解
  • ICMP协议
  • 组网技术知识点
  • Attention层的FLOPs计算
  • C语言发展史:从Unix起源到现代标准演进
  • finebi使用资源迁移无法导入资源,解决方法
  • 编译faiss
  • Multicore-TSNE
  • ROS2与Carla安装设备(其三)测试 ROS 2
  • 基于 Rancher 部署 Kubernetes 集群的工程实践指南
  • STM32实现simpleFOC控制无刷电机
  • 基于C++的IOT网关和平台4:github项目ctGateway交互协议
  • 张正友相机标定算法(Zhang’s camera calibration method)原理和过程推导(附OpenCV代码示例)
  • 马上评|启动最高层级医政调查,维护医学一方净土
  • 长三角铁路今日预计发送旅客420万人次,有望创单日客发量新高
  • 贵州锦屏县委原书记舒健已任黔东南州政府办主任
  • 解放日报:服务国家战略,加快建成科技创新高地
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛即将焕新登场