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

    寻找一个数组里的最大值和最小值

    法一:

           分别遍历一遍,次数O(2*N);

    法二:

            根据书上的讲述,

     

    法三:

           主要在法二的基础上改进,法二改变了原数组,法三主要是不改变原数组,定义两个变量MAX和MIN,分别保存最大值和最小值。

    法四:

           分治法,这是重点。

    typedef struct
    {
      int MAX;
      int MIN;
    } iValueType;
    
    iValueType search(int* arr,int m,int n)
    {
       if(n-m<=1) 
       {
         iValueType tmp;
    	 if(arr[n]>arr[m])
    	 {
    		 tmp.MAX=arr[n];
    		 tmp.MIN=arr[m];	 
    	 }
    	 else
    	 {
    		 tmp.MAX=arr[m];
    		 tmp.MIN=arr[n];
    	 }
    	 return tmp;
       }
    
     iValueType leftValue=search(arr,m,m+(n-m)/2);
     iValueType rightValue=search(arr,m+(n-m)/2+1,n);
     
     iValueType tmp;
     if(leftValue.MAX>rightValue.MAX)
    	 tmp.MAX=leftValue.MAX;
     else
    	 tmp.MAX=rightValue.MAX;
    
    
     if(leftValue.MIN>rightValue.MIN)
    	 tmp.MIN=rightValue.MIN;
     else
    	 tmp.MIN=leftValue.MIN;
      
    return tmp;
    }


    复杂度 1.5N

    推导见书上:





           

  • 相关阅读:
    mysql问题: alter导致速度慢
    MySQL的mysql_insert_id和LAST_INSERT_ID
    linux动态链接库---一篇讲尽
    jsoncpp第二篇------API
    SVN第二篇-----命令集合
    svn第一篇----入门指南
    数据结构之堆
    SZU4
    SZU1
    SZU2
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3190366.html
Copyright © 2011-2022 走看看