找出数组

时间:2015-11-11 09:15:43

标签: c arrays

A : [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;
     }
}

2 个答案:

答案 0 :(得分:0)

您正在使用int,当您添加时溢出限制2,147,483,647

答案 1 :(得分:0)

这是一个 Python 中的工作程序,用于解决您的问题:

def check(max_arr,curr):
    if sum(curr) > sum(max_arr):
                max_arr = curr
    elif sum(curr) == sum(max_arr):
        if len(curr) > len(max_arr):
            max_arr = curr
        elif len(curr) == len(max_arr):
            if max_arr and (curr[0] > max_arr[0]):
                max_arr = curr
    return max_arr

def maxset(A):
    curr = []
    max_arr = []
    for i in A:
        if i >= 0:
            curr.append(i)
        else:
            max_arr = check(max_arr,curr)
            curr = []
    max_arr = check(max_arr,curr)                    
    return max_arr