题目:
Give an integer array nums , find the contiguous subarry (containing at least one number) which has the largest sum and return its sum.
给定一个整数数组nums,找到一个具有最大和的连续子数组(至少包含一个数字),并返回其和。
方法一:
找出一个起点和一个终点,并计算之间的和,可以通过暴力循环所有可能性来求最大值。
int maxSubArry(int* nums, int numsSize){
//假设一个最大值;
int max = INT_MIN; //INT_MIN为整数的最小值
//选择一个起点,起点的范围是[0, numsSize-1]
for (int i = 0; i < numsSize; i++){
//选择一个终点,已知j最小为i,则其范围是[i, numsSize-1]
for (int j = i; j < numsSizel j++){
//一开始假设和为零
int sum = 0;
//计算从起到到终点的和
for (int k = i; k <= j; k++){
sum += nums[k];
}
//如果比原本的最大值大,就换掉
if (sum > max){
max = sum;
}
printf("%d %d : %2d (%d)\n", i, j, sum); //打印出所有组合
}
}
return max;
}
可以消去其中一个for循环,
sum = 0
i:0, j:0 => sum = sum + sums[j]
i:0, j:1 => sum = sum + sum[j]
i:0, j:2 => sum = sum + sums[j]
.....
i:0, j:18=> sum = sum + sum[j]
int maxSubArry(int* nums, int numsSize){
int max = INT_MIN;
for (int i = 0; i < numsSize; i++){
for (int j = i; j < numsSizel j++){
int sum = 0;
for (int j = i; j <= numsSize; j++){
sum += nums[j];
}
if (sum > max){
max = sum;
}
}
}
return max;
}