问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
算法一:三重循环,时间复杂度O(n^3)
private static int maxSubArray1(int[] nums) {
int max = -0x7fffffff;
int n = nums.length;
for (int start = 0; start < n; start++) {
for (int end = start + 1; end <= n; end++) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += nums[i];
}
if (sum > max) {
max = sum;
}
}
}
return max;
}
算法二:两重循环,优化重复求和的过程,时间复杂度O(n^2)
private static int maxSubArray2(int[] nums) {
int max = -0x7fffffff;
int n = nums.length;
for (int start = 0; start < n; ++start) {
int sum = 0;
for (int end = start; end < n; ++end) {
sum += nums[end];
if (sum > max) {
max = sum;
}
}
}
return max;
}
登陆发表评论