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;
}
}
答案 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