#include<bits/stdc++.h> using namespace std; //三个数最大值 long Max3(long a, long b, long c) { return max(max(a,b),c); } //求序列a[s...t]中最大连续子序列 long MaxSum(int a[], int s, int t) { long maxlsum, maxrsum, maxl=0, maxr=0; if(s==t) //序列只有1个元素 return max(a[s], 0); int mid=(s+t)/2; maxlsum=MaxSum(a, s, mid); //左最大子序列和 maxrsum=MaxSum(a, mid+1, t); //右最大子序列和 long templsum=0; for(int i=mid; i>=s; i--) //求左边加上mid元素构成的序列和 { templsum+=a[i]; if(templsum>maxl) maxl=templsum; } long temprsum=0; for(int i=mid+1; i<=t; i++) //求右边构成的序列和 { temprsum+=a[i]; if(temprsum>maxr) maxr=temprsum; } return Max3(maxlsum, maxrsum, maxl+maxr); } int main() { int a[]={-2,11,-4,13,-5,-2}; int n=sizeof(a)/sizeof(*a); cout<<"最大连续子序列和为"<<MaxSum(a, 0, n-1); }把这段代码改成java
时间: 2024-01-20 15:02:33 浏览: 59
下面是将C++代码改写成Java代码的版本:
```java
import java.util.*;
public class Main {
// 三个数最大值
static long Max3(long a, long b, long c) {
return Math.max(Math.max(a, b), c);
}
// 求序列a[s...t]中最大连续子序列
static long MaxSum(int[] a, int s, int t) {
long maxlsum, maxrsum, maxl = 0, maxr = 0;
if (s == t) // 序列只有1个元素
return Math.max(a[s], 0);
int mid = (s + t) / 2;
maxlsum = MaxSum(a, s, mid); // 左最大子序列和
maxrsum = MaxSum(a, mid + 1, t); // 右最大子序列和
long templsum = 0;
for (int i = mid; i >= s; i--) // 求左边加上mid元素构成的序列和
{
templsum += a[i];
if (templsum > maxl)
maxl = templsum;
}
long temprsum = 0;
for (int i = mid + 1; i <= t; i++) // 求右边构成的序列和
{
temprsum += a[i];
if (temprsum > maxr)
maxr = temprsum;
}
return Max3(maxlsum, maxrsum, maxl + maxr);
}
public static void main(String[] args) {
int a[] = { -2, 11, -4, 13, -5, -2 };
int n = a.length;
System.out.println("最大连续子序列和为" + MaxSum(a, 0, n - 1));
}
}
```
这个Java版本的代码与原来的C++代码的思路完全一致,只是将语法改成了Java的形式。
阅读全文