请用Java写出一维数组,这个数组有多个连续子数组,请求和最大子数组并输出的代码
时间: 2023-07-24 14:08:32 浏览: 86
Java编程一维数组转换成二维数组实例代码
5星 · 资源好评率100%
下面是一个用 Java 编写的示例代码,用于找到一维数组中和最大的子数组,并输出结果:
```java
public class MaxSubarraySum {
public static int[] findMaxSubarray(int[] nums) {
if (nums == null || nums.length == 0) {
return new int[0];
}
int currentSum = nums[0];
int maxSum = nums[0];
int start = 0;
int end = 0;
for (int i = 1; i < nums.length; i++) {
if (currentSum < 0) {
currentSum = nums[i];
start = i;
} else {
currentSum += nums[i];
}
if (currentSum > maxSum) {
maxSum = currentSum;
end = i;
}
}
int[] maxSubarray = new int[end - start + 1];
System.arraycopy(nums, start, maxSubarray, 0, end - start + 1);
return maxSubarray;
}
public static void main(String[] args) {
int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int[] maxSubarray = findMaxSubarray(nums);
System.out.println("Max Subarray: ");
for (int num : maxSubarray) {
System.out.print(num + " ");
}
System.out.println();
}
}
```
在这段代码中,`findMaxSubarray` 方法接受一个一维数组 `nums`,通过遍历数组并动态更新当前和 `currentSum` 和最大和 `maxSum`,同时记录最大子数组的起始位置 `start` 和结束位置 `end`。最后,使用 `System.arraycopy` 将最大子数组拷贝到新的数组 `maxSubarray` 中,并返回结果。
在 `main` 方法中进行了一个示例测试,找到了数组 `nums` 中的和最大的子数组,并输出结果。
阅读全文