zoukankan      html  css  js  c++  java
  • 寻找数组中的最大值和最小值

     

    解法一:将寻找数组中的最大值和最小值看成是两个独立的问题。分别求出最大值和最小值即可。这样需要2*N次的比较才能求出最大的数和最小的数。

    void FindMinMax(int A[],int size,int &min,int &max)
    {
        min=A[0];
        max=A[0];
        for(int i=1;i<size;i++)
        {
            if(A[i]>max)
                max=A[i];
            if(A[i]<min)
                min=A[i];
        }
    }

    解法三:解法已经将比较次数降低到1.5N次,但是它已经破坏原来的数组。可以不需要调整数组元素的位置,直接用两个变量Max和Min来存储当前的最大值和最小值。同一组的两个数比较之后,不再调整顺序,而是用较小者与当前的Min比较,如果该数小于当前Min,则更新Min。Max同理。该算法的比较次数扔为1.5N.

    void findMaxMin(int a[],int size,int &min,int &max)
    {
        for(int i=0;i<size-1;i++)
        {
            if(a[i+1]>a[i])
            {
                if(a[i+1]>max)
                    max=a[i+1];
                if(a[i]<min)
                    min=a[i];
            }
            else
            {
                if(a[i]>max)
                    max=a[i];
                if(a[i+1]<min)
                    min=a[i+1];
            }
        }
    }

     扩展问题:如果需要找出N个数组中第二大数,需要比较多少次?

    int FindSecondNum(int a[],int size)
    {
        int max=a[0];
        int secondNum=0;
        for(int i=1;i<size;i++)
        {
            if(a[i]>max)
            {
                secondNum=max;
                max=a[i];
    
            }
            else
            {
                if(secondNum<a[i])
                    secondNum=a[i];
            }
        }
        return secondNum;
    }
  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/wft1990/p/7485697.html
Copyright © 2011-2022 走看看