1045 快速排序 (25 分)

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。
给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?

例如给定 N=5N = 5N=5, 排列是1、3、2、4、5。则:

  • 1 的左边没有元素,右边的元素都比它大,所以它可能是主元;
  • 尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元;
  • 尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它不能是主元;
  • 类似原因,4 和 5 都可能是主元。
  • 因此,有 3 个元素可能是主元。

输入格式:

输入在第 1 行中给出一个正整数 N(≤10^​5​​)
第 2 行是空格分隔的 N 个不同的正整数,每个数不超过 10^​9 ​​ 。

输出格式:

在第 1 行中输出有可能是主元的元素个数;在第 2 行中按递增顺序输出这些元素,其间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

5
1 3 2 4 5

输出样例:

3
1 4 5

看见这个题目首先还是想的暴力求解,很明显不行o(n^2)太慢了

#include<stdio.h>
int main()
{int n;scanf("%d",&n);int a[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);} int cnt=0;int b[n];for(int i=0;i<n;i++){int flag=1;for(int j=0;j<i;j++){if(a[j]>a[i]){flag=0;break;}}for(int j=i;j<n;j++){if(a[j]<a[i]){flag=0;break;}}if(flag){b[cnt] = a[i];cnt++;}}printf("%d\n",cnt);for(int i=0;i<cnt;i++){if(i)printf(" ");printf("%d",b[i]);}printf("\n");
}

看了一下网上的求解,成为主元的两个要求:

  • 前面没有比这个数更大的,也就是主元最大;
  • 主元应该在排完序之后对应的位置;

所以只能利用了sort快排,把学c的我强行变成c++。只用O(n)的复杂度,然后在遍历求当前是否为最大值就行了

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{int n;scanf("%d",&n);int a[n];int b[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);b[i] = a[i];} sort(b,b+n);int max=0;int cnt=0,c[n];for(int i=0;i<n;i++){if(a[i]>max)max = a[i];if(a[i]==b[i]&&max==a[i]){c[cnt] = a[i];cnt++;}} if(cnt==0){printf("0\n\n");return 0;}printf("%d\n",cnt);for(int i=0;i<cnt;i++){if(i)printf(" ");printf("%d",c[i]);}
}

1045 快速排序 (25 分)相关推荐

  1. C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)

    1045 快速排序 (25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 ...

  2. 1045 快速排序 (25分)

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 N 个互不相同的正整数的排列,请问 ...

  3. 测试点2详解:1045 快速排序 (25分)——23行代码满分

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到 ...

  4. 【PAT乙级】1045 快速排序 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<algorithm> #include<vector> ...

  5. PAT 1045 快速排序(25)(STL-set+思路+测试点分析)

    1045 快速排序(25)(25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分 ...

  6. 1045. 快速排序(25)-PAT乙级真题

    原题: 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列, ...

  7. PTA 快速排序 (25分)

    每个人都有崩溃的时候,就看你的抗压能力到底有多强,如果你的抗压能力强,有办法可以支撑到你能面对并且解决这些困难的话,你就没有问题.                                    ...

  8. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)

    1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...

  9. Pat乙级 1045 快速排序

    Pat乙级 1045 快速排序 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/99480527858996 ...

最新文章

  1. 《因果学习周刊》第6期:因果推荐系统
  2. Missing Data in Kernel PCA
  3. 记一次小机器的 Python 大数据分析
  4. 利用DataSet对Xml文件操作
  5. torch中的topk()函数
  6. python多线程为什么要用队列_Python程序中的线程操作-线程队列
  7. jquery.validate.unobtrusive的使用
  8. 从企业发展的角度来分析做网站的重要性
  9. encoder decoder模型_3分钟|聊一聊 Decoder 模块
  10. python数据可视化编程实战 第2版 github_Python数据可视化编程实战(三):在Mac OS X上安装matplotlib...
  11. static关键字_一题搞定static关键字
  12. 计算机基础知识会议记录,电脑上会议记录怎么写?
  13. 关键词、词库、关键词词库
  14. 网站如何防止被篡改?
  15. git push -u origin XXX 报错
  16. 一杯严选+荣登一品+美私奢玩@HiFi++中国式高阶生活美学的海外文化节
  17. 9999*9999这样的命令在python中无法运行_智慧树形势与政策2018章节答案
  18. 为什么要格式化namenode以及注意点
  19. html tab focus,tabindex解决div获得焦点focus()和失去焦点blur()的问题
  20. DD-WRT v24-sp2的WDS中继设置

热门文章

  1. quot c语言数组压缩 quot,程序员之---C语言细节12(指针和数组细节,quot;//quot;的可移植性说明)...
  2. 我眼中的计算机,我眼中的计算机-计算机开机背后的故事
  3. 阿里云罗小飞:阿里云边缘云,从资源到场景的产品演进
  4. 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!
  5. 厉害了!祝贺PolarDB喜提科技进步一等奖
  6. 永劫无间最无解振刀,法神推出缴械奇招,距离高手只差一步
  7. Python基础——PyCharm版本——第二章、数据类型和变量(超详细)
  8. iphone5登陆不了微信,提示“登录失败,连接失败,请检查网络设置”
  9. ORACLE11G自动维护任务简析
  10. ORA-08176 错误的一个案例