zoukankan      html  css  js  c++  java
  • 数组中选第k个最小的数和子数组的最大和

    //1.编写程序,在O(n)时间内从数组x[0...n-1]中找出第K个最小的元素。算法可以对x中的元素进行排序
    int bigrand( )
    {
     return RAND_MAX*rand() +rand();
    }
    int randint(int l,int u)
    {
     return 1+bigrand() %(u-l+1);
    }
    void select(int left, int right ,int x[],int k)
    {
     if ( left >= right)
      return;
     int random=randint(left,right);
     swap( left, random );
     int t =x[left], i =left, j=right+1;
     int temp;
     while(true)
     {
      do 
      {
       i++;
      }while( i <= right && x[i] <t );
      do
      {
       j--;
      }while(x[j] > t);
      if (i >j )
       break;
      temp =x[i]; x[i] = x[j]; x[j] =temp;
     }
     swap(left,j);
     if ( j < k)
      select( j+1, right,x, k);
     else if (j > k)
      select(left, j, x, k);
    }
     
    //2.编写程序求出子数组中最大的和
    int MaxSum(int x[ ], int length)
    {
     int maxAll =0;
     int maxCurrent =0;
     for (int i=0; i < length; i++)
     {
      maxCurrent = max( maxCurrent+ x[i], 0);
      maxAll = max(maxAll, maxCurrent);
     }
     return maxAll;
    }
  • 相关阅读:
    POJ
    模板
    HDU
    CodeForces
    CodeForces
    Java
    百度之星2014复赛
    百度之星2014复赛
    转载
    百度之星2014初赛
  • 原文地址:https://www.cnblogs.com/hzhida/p/2750298.html
Copyright © 2011-2022 走看看