求陣列中和最大的子陣列(陣列中和最大的子串)

2021-06-10 14:28:46 字數 2158 閱讀 5822

某公司面試題,回來找的答案這個是最好的。

int kadane(const int array, size_t length, unsigned int& left, unsigned int& right)  

} else

} return max;

}

這裡我們需要注意,對於陣列元素全為負的情況,由於不滿足上述的兩條結論,所以kadane演算法無法給出正確答案。

該問題是2023年ulf grenander提出的乙個數字影象方面的問題,2023年jay kadane才給出了這個優美的解決方案。有些問題,看似解法簡單,但是實際上其原理,要比**複雜得多。

支援全部都是負數的修改c語言實現如下:

[cpp]view plain

copy

print?

#include 

#include 

void  printarray(int * array, int len);  

int subarraymaxsum(int *a, int len, int* start, int * end);  

int main(int argc, char* argv, char* env)  

,  ,  

};  

int len;  

int left;  

int right;  

int maxsum;  

int i;  

int n  = sizeof(arrays)/sizeof(arrays[0]);  

for(i=0; ilen = sizeof(arrays[i])/sizeof(arrays[i][0]);  

maxsum = subarraymaxsum(arrays[i], len, &left, &right);  

printf("array:");  

printarray(arrays[i], len);  

printf(".\nthe max sum sub array is \n");  

printarray(arrays[i]+left, right-left+1);  

printf("\n the max sum is %d \n\n\n", maxsum);  

}  return 0;  

}  void  printarray(int * array, int len)   

printf("]");  

}  int subarraymaxsum(int *array, int len, int* start, int* end)else   

cur_sum += array[i];  

}  }  

if(max_sum == 0)   

}  right = left;  

}  *start = left;  

*end = right;  

return max_sum;  

}  

#include #include void  printarray(int * array, int len);

int subarraymaxsum(int *a, int len, int* start, int * end);

int main(int argc, char* argv, char* env)

, ,

};int len;

int left;

int right;

int maxsum;

int i;

int n = sizeof(arrays)/sizeof(arrays[0]);

for(i=0; imax_sum)

cur_sum += array[i];}}

if(max_sum == 0)

}right = left;

}*start = left;

*end = right;

return max_sum;

}

測試結果:

求陣列中和最大的子陣列

題目一 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每 個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n cpp view plain copy include stdio.h include conio.h 求一維陣列的最大連續子陣列元素之...

求陣列中和最大的子陣列與始末下標

using system using system.collections.generic using system.linq using system.text namespace maxsum myarray new int myarray new int myarray new int mya...

求陣列中和最大的子陣列與始末下標

using system using system.collections.generic using system.linq using system.text namespace maxsum myarray new int myarray new int myarray new int mya...