Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从数组中找出非负数的最大子数组_C_Arrays - Fatal编程技术网

C 从数组中找出非负数的最大子数组

C 从数组中找出非负数的最大子数组,c,arrays,C,Arrays,答:[1,2,5,-7,2,3]这两个子数组是[1,2,5][2,3]。 答案是[1,2,5],因为其总和大于[2,3] 注:如果有平局,则与段的长度和具有最大长度的返回段进行比较。 注2:如果仍然存在平局,则返回具有最小起始索引的段 我已经为某些情况编写了代码及其工作原理,但不适用于此: A : [ 1967513926, 1540383426, -1303455736, -521595368 ] Your function returned the following : 196751392

答:[1,2,5,-7,2,3]这两个子数组是[1,2,5][2,3]。 答案是[1,2,5],因为其总和大于[2,3]

注:如果有平局,则与段的长度和具有最大长度的返回段进行比较。 注2:如果仍然存在平局,则返回具有最小起始索引的段

我已经为某些情况编写了代码及其工作原理,但不适用于此:

A : [ 1967513926, 1540383426, -1303455736, -521595368 ]
Your function returned the following :
1967513926 
The expected returned value :
1967513926 1540383426 
这是我的密码

int* maxset(int* A, int n1, int *length_of_array) {

     int greatin=0,greatout=0,greatin1=0,number1=0,number=0;
     int n3,i,count=0,k,sum=0,max=0,ini=0,end=0;

     for(i=0;i<n1;i++)
     {
         ini=end;
         if(A[i]>=0)
         {
             count=1;
             number++;
             sum=sum+A[i];
             if (sum>max )
             {

                 max=sum;
                 greatout=i;
                 greatin=ini;

             }
             else if (sum==max && number>number1)
             {
                  max=sum;
                 greatout=i;
                 greatin=ini;
             }
         }
        else
        {
            sum=0;
            end=i+1;
            number1=number;
            number=0;

        }
     }
    if(count>0)
    {
          count=0;
          n3=greatout-greatin+1;
          *length_of_array=n3;
          int * ret = (int *) malloc(sizeof(int) * *length_of_array);

          for(i=greatin;count<n3;i++)
          {
               ret[count]=A[i];
               count++;

          } 
     return ret;

    }
    else
     {

      *length_of_array=0;
      int * ret = (int *) malloc(sizeof(int) * *length_of_array);
      return ret;
     }
}

您使用的是int,当您添加时,超出了此处已回答的2147483647限制:这是一个不同的问题,因为,数组可以包含一个负数,该负数要求子数组的整个和为非负数。但在这种情况下,子数组不能有负数。因此,每当遇到负值时,移除该值并拆分数组?是的,每当数组中遇到负数时,直到该部分成为子阵列,并且在该负值之后开始下一个子阵列。我们现在必须找到子数组的最大值。我们实际上并没有删除负值。。