本题相关链接, 连续子数组的最大和, 这个题目的思路较为简单, 直接上代码:
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if(array.length == 0 || array == null)
return 0;
int countSum = 0;
int greatSum = 0x80000000;
for(int i = 0 ; i < array.length; i++) {
if(countSum <= 0)
countSum = array[i];
else{
countSum += array[i];
}
if(countSum > greatSum)
greatSum = countSum;
}
return greatSum;
}
}
本题唯一需要注意的地方在于 greatSum 的初始值, 这里的 greatSum = 0x80000000 表示的是 32 位数的最小值, 负 2 的 32 次方.
在十六进制中, 负数在内存中储存的是原码. 十六进制中负数的二进制原码的最高位是符号位, 后面的 31 位为序号位, 而不是值位;
由于 int 的最小值为 - 2^31, 排在负数从小到大的序号 1, 所以 int i = 0x80000000 输出为 - (2^31)