设为首页 加入收藏

TOP

求二维数组子数组和中最大的值(三)
2014-07-19 23:04:39 来源: 作者: 【 】 浏览:262
Tags:二维数 最大

 

  // 求数组的子数组之和最大的边界

  void Array::Border_Max_Sum_Sub_Array(int *data,unsigned int const length,unsigned int & L,unsigned int & R)

  {

  // 异常输入

  if(data == NULL || length == 0 )

  {

  cout《"异常输入 Border_Max_Sum_Sub_Array"《endl;

  return void(0);

  }

  // 正常输入

  else

  {

  bool all_fushu = true ;

  unsigned int max = 0;

  // 检查是否所有的数是否都是负数,并记录最大值的下表

  for( unsigned int i = 0;i < length;i++ )

  {

  if( data[i] >= 0 )

  {

  all_fushu = false ;

  break ;

  }

  else if( data[i] > data[max] )

  {

  max = i ;

  }

  }

  // 如果都是负数

  if(all_fushu == true)

  {

  R = L = max+1;

  return void(0);

  }

  // 如果不都是负数

  else

  {

  // 核心算法 初始化

  int left_sum = data[0],right_sum = data[length-1] ;

  int left = 0,right =length-1;

  L = left; R = right ;

  // 选择前进方向

  while(left < right-1)

  {

  if(left_sum < right_sum)

  {

  if(left_sum < 0)

  {

  left_sum = 0 ;

  L = left+1 ;

  }

  left++;

  left_sum += data[left];

  }

  else

  {

  if(right_sum < 0)

  {

  right_sum = 0;

  R = right -1;

  }

  right--;

  right_sum += data[right];

  }

  }

  // 寻求结果

  // 如果舍弃左半个数组,保留右半个数组

  if(left_sum <= 0)

  {

  L = right + 1;

  R++ ;

  }

  // 如果舍弃右半个数组,保留左半个数组

  else if(right_sum <= 0){

  L++;

  R = left+1;

  }

  // 两边都不舍弃

  else{

  L++;R++;

  }

  return void(0);

  }

  }

  }

      

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++堆和栈空间的区别 下一篇C++的那些事:面向对象

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)