当前位置: 首页 > 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;
}
http://www.xdnf.cn/news/238303.html

相关文章:

  • RAII 示例
  • 2025-03 机器人等级考试四级理论真题 4级
  • Dify添加ollama模型失败:NewConnectionError: Failed to establish a new connection
  • MCP与开源社区的共赢之道:携手推动技术创新
  • GRE隧道
  • Git Stash 详解
  • windows系统常用快捷键(CMD常用命令,DOS常用命令)
  • C++类和对象(中)
  • PostgreSQL中的SSL
  • 设备目录树--个人笔记
  • linux中sigint和sigterm的区别
  • react-11使用vscode开发react相关扩展插件(相关的快捷生成)
  • 开芯课堂丨视觉与4D毫米波前融合感知算法设计
  • [计算机科学#6]:从锁存器到内存,计算机存储的构建与原理
  • 航电系统之网络控制运动技术篇
  • C++Primerplus编程练习 第三章
  • Vue3源码学习-提交限制
  • 标准解读:数据要素安全可信流通技术标准【附全文阅读】
  • 驾驭音质,尽享四通道力量——AXPA17851
  • 若依定时任务
  • 【go】简单问答八股,go的理解,接口,锁,channel
  • 处理vue3热加载后axios的请求重复访问的问题
  • 深入理解C++17中的std::string_view
  • LibAI Lab走进西浦:重塑“AI+建筑”教育
  • 做了数据中台,还需要做数据治理吗?
  • 2025.4.28 Vue.js 学习笔记
  • 饿了么推出骑手AI助手小饿,智能配送再升级
  • 【综述】相位解包裹算法对比分析
  • QML学习:使用QML实现抽屉式侧边栏菜单
  • 融合AI助力医疗提效,华奥系医务系统助力医院数字化升级!