最大间隙问题

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int getMaxpos(vector<double>  nums,int n)
  5. {
  6.     int maxPos = 0;
  7.     double  tmp = nums.at(maxPos);
  8.     for(int i = 1; i < n; i++)
  9.     {
  10.         if( nums.at(maxPos) < nums.at(i) )
  11.         {
  12.             maxPos = i;
  13.             tmp = nums.at(i);
  14.         }
  15.     }
  16.     return maxPos;
  17. }
  18. int getMinpos(vector<double>  nums,int n)
  19. {
  20.     int minPos = 0;
  21.     double tmp = nums.at(minPos);
  22.     for(int i = 1; i < n; i++)
  23.     {
  24.         if( nums.at(minPos) > nums.at(i) )
  25.         {
  26.             minPos = i;
  27.             tmp = nums.at(i);
  28.         }
  29.     }
  30.     return minPos;
  31. }
  32. int main()
  33. {
  34.     int num;
  35.     double max = 0;
  36.     double min = 0;
  37.     int  maxPos = 0;
  38.     int  minPos = 0;
  39.     double tt;
  40.     
  41.     vector<double> iNumAry;
  42.     cin>>num;
  43.     for(int i=0; i<num; i++)
  44.     {
  45.         cin>>tt;
  46.         iNumAry.push_back(tt); 
  47.     }
  48.     
  49.     maxPos = getMaxpos(iNumAry,num);
  50.     minPos = getMinpos(iNumAry,num);
  51.     max = iNumAry.at(maxPos);
  52.     min = iNumAry.at(minPos);
  53.     int *count=new int[num];        
  54.     double *low=new double[num];    
  55.     double *high=new double[num];
  56.     
  57.     double avrGap=(max-min)/(num-1);    
  58.     
  59.     for(int i=0;i<num;i++)
  60.     {
  61.         count[i] = 0;
  62.         low[i] = max;
  63.         high[i] = min;
  64.     }
  65.     
  66.     int pos;
  67.     for(int i=0; i<num; i++)
  68.     {
  69.         pos=int((iNumAry.at(i)-min)/avrGap)+1;
  70.         if( pos == num )    pos -= 1;
  71.         count[pos] ++;
  72.         if( iNumAry.at(i) < low[pos] )  low[pos]=iNumAry.at(i);
  73.         if( iNumAry.at(i) > high[pos] ) high[pos]=iNumAry.at(i);
  74.     }
  75.     double result = 0;
  76.     double datHigh=high[1];
  77.     double datTempGap;
  78.     for(int i = 2; i < num; i++)
  79.     {
  80.         if(count[i])    
  81.         {
  82.             datTempGap=low[i]-datHigh;
  83.             if( result < datTempGap) 
  84.                 result = datTempGap;
  85.             datHigh=high[i];
  86.         }
  87.     }
  88.     cout<<result<<endl;
  89.     
  90.     delete[] count;
  91.     count=NULL;
  92.     delete[] low;
  93.     low=NULL;
  94.     delete[] high;
  95.     high=NULL;
  96.     
  97.     return 0;
  98. }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值