PAT 1101

来源:互联网 发布:mac ext4 读写 编辑:程序博客网 时间:2024/05/20 22:35

1、题目链接

https://www.patest.cn/contests/pat-a-practise/1101

2、题意分析

(1)题意:从给出的一串数字中找出可以作为快速排序的主元。

(2)分析:如果我们暴力一层一层搜索的话,则发现时间会超时。那么我们可以这么处理:

我们思考,对于一串数字,如果该数字是主元的话,那么该数左边的数都小于等于它,该数右边的数都大于它。所以我们可以使用两次循环。(注意是两次,不是两层),第一次判断出当前数是否比之前的所有数都大。第二次遍历判断是否比后面的数都小。

3、源代码

(1)暴力算法

#include <stdio.h>#define size 100001int main(){  int n;  scanf("%d",&n);    int i ,j ,max = 0,min = 1000000000;  int array[size][3];//0为本值,1为是否比前面数都大,2为是否比后面数都小   for (i = 0;i<n;i++){    scanf("%d",&array[i][0]);      if(array[i][0] > max){      array[i][1] = i;      max = array[i][0];//更新max值     }  }     for (i = n-1;i >=0;i--){    if(array[i][0] < min){      array[i][2] = i;      min = array[i][0];//更新max值     }  }     int total = 0;   int record[size];  for(i = 0;i<n;i++){        if(array[i][1] == i && array[i][2] == i){              record[total++] = array[i][0];            }    }    printf("%d\n",total);  for(i = 0;i<total;i++){    printf("%d",record[i]);    if(i!=total-1){      printf(" ");    }  }}/**51 3 2 4 5101 2 3 4 5 6 7 8 9 1021 2*/  
(2)第二种思维

#include <stdio.h>#define size 100001int main(){int n;scanf("%d",&n);int i ,j ,max = 0,min = 1000000002;int array[size][3];//0为本值,1为是否比前面数都大,2为是否比后面数都小 for (i = 0;i<n;i++){scanf("%d",&array[i][0]);if(array[i][0] >= max){array[i][1] = -1;//需要使用一个特殊的值(-1),用来避免数值恰好相等 max = array[i][0];//更新max值 }} for (i = n-1;i >=0;i--){if(array[i][0] <= min){array[i][2] = -1;min = array[i][0];//更新max值 }} int total = 0; int record[size];for(i = 0;i<n;i++){if(array[i][1] == -1 && array[i][2] == -1){record[total++] = array[i][0];}}printf("%d\n",total);for(i = 0;i<total;i++){printf("%d",record[i]);if(i!=total-1){printf(" ");}}printf("\n");}/**51 3 2 4 551 3 3 4 51010 9 8 7 6 5 4 3 2 11121 2*/

4、坑点

(1)需要注意在判定该数是否为之前的最大数,为之后的最小数,我这里使用的是array[i][1] = -1和array[i][2] = -1表示。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃甜的牙齿痛怎么办 吃糖了牙齿痛怎么办 马桶倒剩菜堵了怎么办 孕期喜欢吃甜的怎么办 1周岁了还没长牙怎么办 小孩十一个月还没长牙怎么办 吃羊肉上火牙疼怎么办 吃羊肉后上火了怎么办 羊肉吃多了上火怎么办 小孩吃糖牙齿坏怎么办 一岁宝宝吐奶怎么办 一个月宝宝吐奶怎么办 2个月里小孩好哭怎么办 两个月宝宝闹觉怎么办 6岁儿童视力0.5怎么办 单一的三系减少怎么办 血小板低到50该怎么办 放化疗后白细胞低怎么办 化疗后白细胞低发烧怎么办 全程c反应蛋白高怎么办 儿童c反应蛋白高怎么办 c反应蛋白高是怎么办 新生儿c反蛋白高怎么办 c反应蛋白高发烧怎么办 血沉高到50了怎么办啊 血沉和超敏偏高怎么办 孕37周血糖偏高怎么办 孕37周血糖7.0多怎么办 孕妇超敏crp偏高怎么办 高敏c反应蛋白高怎么办 孕17周尿蛋白高怎么办 血小板低到20该怎么办 血象高发烧39度怎么办 新生儿血象3万多怎么办 血象高发烧不退怎么办 半岁宝宝血象高怎么办 5-6小孩免疫力差怎么办 快速c反应蛋白高怎么办 15个月宝宝发烧怎么办 小孩发烧到40度怎么办 孩子发烧到39度怎么办