我的测试是解决以下问题: 给出了由N个整数组成的零索引数组A. 编写一个解决方案来找出A的子数组,其中包含具有所有项目最大总和的后续项目。
示例:
A = [2, -1, 3, -3, 4, -9, 10, -3, 4, -4, -7, 2, 8]
。答案是[10, -3, 4]
A = [3, 2, -5, 7, 4, -8, 3, -5, 2, 4, -2, 4]
。答案是[7, 4]
A = [-2, 5, 3, 6, -1,-5]
。答案是[-2, 5, 3, 6]
。
请帮我解决一下。
答案 0 :(得分:1)
基本上,您需要做的是遍历数组并检查元素总和的最大值。找到最大总和后,您将获得所得子阵列的最后一个元素。 一旦找到了max元素,就需要遍历并执行相同的操作,以便找到具有最大元素总和的子数组。
int iNewTopHigh = 0;
int iNewTopLow = 0;
int iIndNewTopHigh = 0;
int iIndNewTopLow = 0;
int iSumHigh = 0;
int iSumLow = 0;
int[] iArr = {2, -1, 3, -3, 4, -9, 10, -3, 4, -4, -7, 2, 8};
//{3, 2, -5, 7, 4, -8, 3, -5, 2, 4, -2, 4};
//{-2, 5, 3, 6, -1,-5};
//Get the top
for(int i = 0; i < iArr.Length; i++){
iSumHigh += iArr[i];
if(iSumHigh > iNewTopHigh){
iIndNewTopHigh = i;
iNewTopHigh = iSumHigh;
}
}
//Get the bottom
for(int i = iIndNewTopHigh; i != 0; i--){
iSumLow += iArr[i];
if(iSumLow > iNewTopLow){
iIndNewTopLow = i;
iNewTopLow = iSumLow;
}
}
//Print results
for(int i = iIndNewTopLow ; i <= iIndNewTopHigh; i++){
Console.Write(iArr[i] + ", ");
}