zoukankan      html  css  js  c++  java
  • B1045 快速排序

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

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

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

    因此,有 3 个元素可能是主元。

    输入格式:

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

    输出格式:

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

    输入样例:

    5
    1 3 2 4 5
    
     

    输出样例:

    3
    1 4 5

    最终AC的代码如下:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    /*
    主元的判断方法:
    1、顺序位置与最终位置相同。
    2、当前位置p的主元,是(0,p)范围内的最大元素,因此记录maxn!!!
    注意:最大元素需要实时更新! 
    */ 
    
    int main(){
        int i, n, temp, maxn=0, a[100005]={0}, b[100005]={0};
        vector<int> ans;
        scanf("%d", &n);
        for(i=0; i<n; i++){
            scanf("%d", &temp);
            a[i] = temp;
            b[i] = temp;
        }
        sort(b, b+n);
        for(i=0; i<n; i++){
            if(a[i]==b[i] && b[i]>maxn){
                ans.push_back(b[i]);
            }
            if(a[i]>maxn){
                maxn = a[i];
            }
        }
        temp = ans.size();
        printf("%d
    ", temp);
        if(temp!=0){
            for(i=0; i<temp; i++){
                if(i!=0){
                    printf(" %d", ans[i]);
                }else{
                    printf("%d", ans[i]);
                }
            }
        }
        printf("
    ");
        return 0;
    }

    反思:对于题干条件:

    左边元素比主元小,右边元素比主元大

    总没有找到合适的方法,反复尝试了数次,测试用例三一直显示“运行超时”。而用maxn的方法很巧妙地解决了这点!

  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/heyour/p/12229671.html
Copyright © 2011-2022 走看看