一个整数数组,长度为n,将其分份为米,使各份的和相等,求m的最大值

  

,,,,前几天去面试的时候,有家公司好奇怪进行机试,然后我就见到这道题,然后我当时好像做了一天了才做出来。中途的时候好像到2点多的时候以为做出来了。然后给了一组数据给我,然后发现有两组数据是异常的,然后就打断点在那里跟后来改了一些东西之后发先运行时报错和那个死循环,后来想到另外一种相似的思路,把之前的代码都注析掉了然后再来写,到7点钟的时候写完,但是调试还是出现运行时错误和死循环,到8点左右把程序调通,我想拍照回去研究研究的时候被拒绝了说公司规矩,然后我觉得那么短的题目很容易就能记住,回来进行构思另外一种写法然后写出来了,结果速度很慢一个21岁的长度的数组要几秒钟才能算出结果,30个长度已经看不到停止的时候了。后来昨天有时间研究了下,改进了代码最终做一个随机数组好像能在几百毫秒算出分组情况吧,然后我又怕忘记之前写的代码所以就把这些代码记下来吧。

# include   # include   # include      using  namespace 性传播疾病;      typedef  vector< int>, intArray_t;      int  sumOfArray (const  vector< int>,,数组),{   int  sum =, 0;   int  size =, array.size ();   for  (int 小姐:=,0;,小姐:& lt;,大小;,我+ +),{   +=sum  array.at(我);   }   return 总和;   }      bool  maxDivFun (list,,数组,,vector,,结果,,int  groupSize,, int  preSize,, vector,, preArray,, list:: iterator  iter), {   while  (iter  !=, array.end ()), {   if  ((preSize , +, * iter), & lt;=, groupSize), {   preArray.push_back (* iter);   bool  isFirst =,假;   if  (iter ==, array.begin ()), {   时间=isFirst 真实;   }   array.erase (iter + +);   if  ((preSize  +, preArray.back ()),==, groupSize), {   if  (array.empty ()), {   result.push_back (preArray);   return 真实;   }   else  {         list,,数组,,vector,,结果),{   if  (array.empty ())   返回;   list

,,,,然后我的测试代码很简单跑完下面这段程序我的电脑要两秒多的时间吧。

int 主要(),{   int  [10000];//int [],=,{, 1, 2, 4日,5日,100年,};//int  [],=, {, 1, 1, 1, 1, 1, 1,};//int  [],=, {,, 3,, 4, 6,, 2,};   for  (int 小姐:=,0;,小姐:& lt;, (sizeof (a),/, sizeof (int));,我+ +),{   [我],=,小姐:+,1;//while (((我),=,(rand (), %, 1000)),==, 0);   }   vector

一个整数数组,长度为n,将其分份为米,使各份的和相等,求m的最大值