著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?
例如给定 N=5, 排列是1、3、2、4、5。则:
因此,有 3 个元素可能是主元。
输入在第 1 行中给出一个正整数 N(≤105); 第 2 行是空格分隔的 N 个不同的正整数,每个数不超过 109。
在第 1 行中输出有可能是主元的元素个数;在第 2 行中按递增顺序输出这些元素,其间以 1 个空格分隔,行首尾不得有多余空格。
- 5
- 1 3 2 4 5
- 3
- 1 4 5
判断方法 : num[] 储存原数组,key[] 复制原数组并排序
for(z->N),如果num[z]符合要求,那么num[z]必定等于key[z],并且num[0]~num[z-1]的数必定都比num[z]小,那么我们只需要一个max记入num[0]~num[z-1]的最大数即刻
// ps : 最后要加一个换行,不然会有一个测试点格式错误.......真奇怪
- #include
- using namespace std;
- int main()
- {
- vector<long> result;
- long num[100001],key[100001],N,max=-1;
- cin >> N;
- for(long z=0;z
- cin >> num[z];
- key[z]=num[z];
- }
- sort(key,key+N);
-
- for(long z=0;z
- if(num[z]
continue; - max = num[z];
- if(num[z]==key[z]) result.push_back(num[z]);
- }
-
- cout << result.size() << endl;
- if(!result.empty()) cout << result[0];
- for(long z=1;z
size();z++) cout << " " << result[z]; - cout << endl;
- return 0;
- }
-
相关阅读:
(附源码)计算机毕业设计SSM基于框架的旅游管理系统
信息系统安全运维和管理指南
Vue常见面试题,如何修改滚动条样式(谷歌浏览器)
Chitosan-g-PBA Chitosan壳聚糖偶联苯硼酸 糖靶向水凝胶聚合物材料
扬帆际海—跨境电商怎么做才好?
探索arkui(2)--- 布局(列表)--- 1(列表数据的展示)
面试24K字节测试开发岗被血虐,到底具有怎样的技术才算高级水平?
CVE-2022-22954-VMware Workspace ONE Access SSTI远程代码执行流量特征
ES集群安装
免交互
-
原文地址:https://blog.csdn.net/daybreak_alonely/article/details/126137475